将子查询的结果作为参数传递给PL / SQL包

大扎

这似乎是一个基本问题,但是我在这里没有发现任何类似的问题...

我目前正在exec通过连接各种字符串和列来生成语句,如下所示:

SELECT ('exec my_package.my_procedure(input_var1 => ''' || columnA || ''', input_var2 => [... ... ...] || ''');') As sql_stmt FROM myTable;

在我决定添加另一个应从子查询中获取其值的输入参数之前,此方法一直很好(我省略了不相关的部分,这与上面的查询相同,只是添加了一个参数):

input_var_my_id => (select NVL(MAX(my_id)+1,1) from  someTable where [various conditions] )

添加该参数后,出现一个PLS-00103错误,说当(-+ case mod new not not null [....]时遇到了符号SELECT。

生成的exec语句如下所示:

 my_package.my_procedure(input_var1 => 'whatever', input_var_my_id => (select NVL(MAX(my_id)+1,1) from  someTable where [various conditions] ));

子查询本身是有效的,如果我从生成的语句中将其复制并执行,则结果是单个数据集-符合预期。

不可能将子查询的结果作为参数传递给PL / SQL包吗?有什么解决方法吗?谢谢你的帮助

亚历克斯·普尔

不,不可能在实际参数列表中进行查询。您可以直接调用某些函数,但只能调用在PL / SQL中实现的那些函数。您无法切换到SQL上下文。您可以通过一个更简单的示例看到这一点:

exec dbms_output.put_line(select user from dual);

ORA-06550: line 1, column 28:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:
...

您将不得不将查询结果放入一个局部变量中,该变量在生成的代码中将是丑陋的。它需要结束为:

declare
  l_input_var_my_id someTable.my_id%type;
begin
  select NVL(MAX(my_id)+1,1) into l_input_var_my_id from someTable where [various conditions];
  my_package.my_procedure(input_var_my_id => l_input_var_my_id, ...);
end;

您可以将所有内容放入exec

exec declare l_input_var_my_id someTable.my_id%type; begin select NVL(MAX(my_id)+1,1) into l_input_var_my_id from someTable where [various conditions];  my_package.my_procedure(input_var_my_id => l_input_var_my_id, ...); end;

...然后从您的原始查询中生成。

但是,由于exec这只是匿名块的简写,并且默认情况下必须位于一行上,因此生成该块可能会更清晰-因此,在不带exec和的情况下,请/自行将其放在一行上。取决于您计划如何调用结果以及它是否需要易于阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将参数列表作为输入传递给SQL查询

来自分类Dev

将List <int>作为查询参数传递给SQL Server

来自分类Dev

将参数列表作为输入传递给SQL查询

来自分类Dev

将List <int>作为查询参数传递给SQL Server

来自分类Dev

PL / SQL:将字符串的“数组”作为参数传递给sql

来自分类Dev

将值列表作为输入参数传递给PL / SQL过程

来自分类Dev

如何将动态 SQL 结果作为参数传递给 DBCC 命令?

来自分类Dev

如何将SQL查询作为包含双引号的参数传递给psql

来自分类Dev

将闭包作为参数传递给构造函数C ++

来自分类Dev

SQL Server OpenQuery-将参数结果从主SELECT查询传递到子查询

来自分类Dev

将子查询直接传递给SQL Server中USP中的表类型参数

来自分类Dev

将sql查询作为数据传递给highchart

来自分类Dev

将文件内容作为参数传递给Sql * Plus命令

来自分类Dev

Mule Sql查询-将参数传递给IN运算符

来自分类Dev

如何将参数传递给Microsoft SQL Server查询?

来自分类Dev

Mule Sql查询-将参数传递给IN运算符

来自分类Dev

将SQL结果作为VBScript对象的参数传递

来自分类Dev

groovy ..将闭包作为参数传递给另一个闭包

来自分类Dev

将MONTH传递给子查询时,SQL select子查询将永远运行

来自分类Dev

将参数传递给函数闭包

来自分类Dev

将零参数包传递给printf

来自分类Dev

将参数传递给包回调

来自分类Dev

将一个查询的结果传递给SQL中的另一个查询

来自分类Dev

在swift中将多个闭包作为参数传递给函数

来自分类Dev

将表名作为参数传递时,PL / SQL函数不起作用

来自分类Dev

pl / sql过程不允许将表名/视图名作为参数传递

来自分类Dev

将动态创建的SQL参数作为匿名类型传递给dapper

来自分类Dev

将IEnumerable <string>作为用户定义的表类型参数传递给SQL Server存储过程

来自分类Dev

将谓词作为参数传递给Where子句时,EF SQL发生了更改

Related 相关文章

  1. 1

    将参数列表作为输入传递给SQL查询

  2. 2

    将List <int>作为查询参数传递给SQL Server

  3. 3

    将参数列表作为输入传递给SQL查询

  4. 4

    将List <int>作为查询参数传递给SQL Server

  5. 5

    PL / SQL:将字符串的“数组”作为参数传递给sql

  6. 6

    将值列表作为输入参数传递给PL / SQL过程

  7. 7

    如何将动态 SQL 结果作为参数传递给 DBCC 命令?

  8. 8

    如何将SQL查询作为包含双引号的参数传递给psql

  9. 9

    将闭包作为参数传递给构造函数C ++

  10. 10

    SQL Server OpenQuery-将参数结果从主SELECT查询传递到子查询

  11. 11

    将子查询直接传递给SQL Server中USP中的表类型参数

  12. 12

    将sql查询作为数据传递给highchart

  13. 13

    将文件内容作为参数传递给Sql * Plus命令

  14. 14

    Mule Sql查询-将参数传递给IN运算符

  15. 15

    如何将参数传递给Microsoft SQL Server查询?

  16. 16

    Mule Sql查询-将参数传递给IN运算符

  17. 17

    将SQL结果作为VBScript对象的参数传递

  18. 18

    groovy ..将闭包作为参数传递给另一个闭包

  19. 19

    将MONTH传递给子查询时,SQL select子查询将永远运行

  20. 20

    将参数传递给函数闭包

  21. 21

    将零参数包传递给printf

  22. 22

    将参数传递给包回调

  23. 23

    将一个查询的结果传递给SQL中的另一个查询

  24. 24

    在swift中将多个闭包作为参数传递给函数

  25. 25

    将表名作为参数传递时,PL / SQL函数不起作用

  26. 26

    pl / sql过程不允许将表名/视图名作为参数传递

  27. 27

    将动态创建的SQL参数作为匿名类型传递给dapper

  28. 28

    将IEnumerable <string>作为用户定义的表类型参数传递给SQL Server存储过程

  29. 29

    将谓词作为参数传递给Where子句时,EF SQL发生了更改

热门标签

归档