Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在db2-unix中将模式名作为参数传递_Db2_Db2 Luw - Fatal编程技术网

在db2-unix中将模式名作为参数传递

在db2-unix中将模式名作为参数传递,db2,db2-luw,Db2,Db2 Luw,我在模式A上的db2(luw)中有一个存储过程,如下所示 CREATE PROCEDURE A.GET_TOTAL (IN ID CHARACTER(23)) BEGIN DECLARE CURSOR1 CURSOR WITH HOLD WITH RETURN TO CLIENT FOR SELECT * FROM B.employee e where e.id=ID END 架构“A”上存在的给定存储过程在另一个架构“B”上运行查询。这是另

我在模式A上的db2(luw)中有一个存储过程,如下所示

CREATE PROCEDURE A.GET_TOTAL (IN ID CHARACTER(23))
    BEGIN
        DECLARE CURSOR1 CURSOR WITH HOLD WITH RETURN TO CLIENT FOR  
        SELECT * FROM B.employee e where e.id=ID
    END

架构“A”上存在的给定存储过程在另一个架构“B”上运行查询。这是另一个模式名称B,可以根据应用程序逻辑进行更改。如何将架构名称作为参数传递到此存储过程?

首先,我认为存储过程不起作用,因为select语句没有在游标或准备好的语句中定义

如果要在存储过程中执行动态SQL,需要在stmt中定义,然后准备并执行它

假设您将模式名称作为参数传递;如果要更改模式,可以动态执行“设置当前模式”或在查询中连接模式名称


有关更多信息:

谢谢。在存储过程中使用动态SQL会影响性能吗?@jayesh是的,会影响性能;但这并不重要,因为如果需要更改SELECT的模式,则需要使用动态SQL。如果SELECT没有静态模式,则在编译函数时SQL无法编译语句——它不知道当时的表和列特征是什么。因此,您使用动态SQL;它本质上变成了一个“即时”SELECT语句。