多个存储过程都需要用到一个常量参数,目前是每个存储过程中都声明了这个参数值,如何优化,才能方便维护,只需修改一次
可以存表里边,每次去获取一下,或者以环境变量的方式存进去
在模拟故障时 通过监视器命令kill主库实例:,守护不会自动拉起实例,需要通过命令开启主库实例;
如果在主库机器,直接kill主库实例,主库守护进程会自动拉起主库实例
SQL> insert into test1 values(now());
insert into test1 values(now());
[-2018]:Error in line: 1
Try to insert/update/delete table table is not temporary or contains lob on standby mode.
used time: 1.039(ms). Execute id is 0.
SQL> /
insert into test1 values(now());
[-2018]:Error in line: 1
Try to insert/update/delete table table is not temporary or contains lob on standby mode.
used time: 0.770(ms). Execute id is 0.
SQL> select now();
LINEID NOW()
---------- --------------------------
1 2021-07-26 09:18:12.186514
used time: 5.890(ms). Execute id is 400.
SQL> exit;
[dmdba@DW_M ~]$ disql SYSDBA/SYSDBA@GRP1
Server[192.168.43.132:32142]:mode is primary, state is open
login used time : 4.219(ms)
disql V8
SQL> /
please input cmd
SQL> select * from test1;
LINEID A
---------- --------------------------
1 2021-07-26 09:06:11.706297
used time: 11.132(ms). Execute id is 500.
解决方案:
可以使用存储过程的参数化查询,将共享的参数放在一个参数中,在多个存储过程中调用这个参数即可。具体步骤如下:
CREATE PROCEDURE my_stored_procedure (
/*其他参数*/
@shared_parameter INT
)
AS
BEGIN
/*其他存储过程代码*/
/*使用@shared_parameter*/
END
EXEC my_stored_procedure @shared_parameter = 1
这样,在不同的存储过程中就可以共享同一个参数值,避免重复声明和修改参数值的麻烦。同时,参数化查询还能提升查询效率,减少SQL注入等安全问题。
另外,还可以使用常量或全局变量等方式实现参数共享,具体实现方式根据实际情况而定。需要注意的是,如果使用常量或全局变量,需要考虑多线程环境下的并发问题和线程安全性。
你可以定义一个没有参数的函数,返回这个常量