在编码另一个存储过程时,如何在不指定完整模式名称的情况下在同一模式中调用存储过程。这些是DB2中的SQL PL过程。
第一个SP:
CREATE PROCEDURE MYSCHEMA.SP_TEST LANGUAGE SQL BEGIN END
创建不带模式名称直接调用此SP的SP会导致编译错误:
CREATE PROCEDURE MYSCHEMA.SP_TEST2 LANGUAGE SQL BEGIN CALL SP_TEST(); END
它将抛出:
找不到具有兼容参数的名为“ PROCEDURE”类型的授权例程“ SP_TEST”。SQLCODE = -440,SQLSTATE = 42884,DRIVER = 3.53.71
直接给出完整的架构名称是可行的:
CREATE PROCEDURE MYSCHEMA.SP_TEST2 LANGUAGE SQL BEGIN CALL MYSCHEMA.SP_TEST(); END
但是,如果我改用其他架构,则必须在各处替换该引用。是否有合适的解决方法或更好的解决方案?
该CURRENT PATH专用寄存器用于解决不合格存储过程和函数的调用。 CURRENT SCHEMA用于解析不合格的对象名称。
CURRENT PATH
CURRENT SCHEMA
缺省情况下,CURRENT PATH具有IBM功能以及您的AUTHID:
$ db2 "values substr(current path,1,60)" 1 ------------------------------------------------------------ "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","IBJORHOV" 1 record(s) selected.
您可以使用该SET CURRENT PATH语句对此进行修改。
SET CURRENT PATH
创建存储过程时,DB2会记下CURRENT PATH编译时的值,并使用它们来解析存储过程中不合格的存储过程和函数调用。相同的逻辑适用于CURRENT SCHEMA表名和非限定表名。
因此,允许在存储过程中进行不合格过程和函数调用的正确方法是设置CURRENT PATH寄存器,然后创建过程。