在pl / sql存储过程中使用绑定变量

时间:2017-12-14 06:06:40

标签: oracle stored-procedures plsql

是否可以在pl / sql存储过程中使用绑定变量(在pl / sql块外部声明和初始化)

我只是想打印如下所示定义的绑定变量:

绑定变量声明和初始化

var jdata varchar2(4000);
exec :jdata := ''{"PONumber":12,"Reference":"StackOver"}'';

pl / sql程序

create or replace PROCEDURE generic_procedure( v_typename IN VARCHAR2,v_path IN VARCHAR2 DEFAULT '$') IS
BEGIN
    dbms_output.put_line(:jdata);
END generic_procedure;
/

错误

  

编译失败:       SQL>显示错误       PROCEDURE GENERIC_PROCEDURE的错误:

     

错误:错误的绑定变量'JDATA'

这里,我试图在generic_procedure(存储的pl / sql过程)中调用jdata。但它说JDATA为

  

错误的绑定变量

2 个答案:

答案 0 :(得分:0)

AFAIK,不认为这是可能的,因为需要在包或程序的范围内定义PL / SQL变量。

您可以创建一个包来保存此变量,然后在过程中设置并使用它的值。

SelectMany

希望它有所帮助 Vishad

答案 1 :(得分:0)

您可以使用替换变量:

define jdata='{"PONumber":12,"Reference":"StackOver"}';


create or replace PROCEDURE generic_procedure( v_typename IN VARCHAR2,
                                               v_path IN VARCHAR2 DEFAULT '$') IS
BEGIN
   dbms_output.put_line('&jdata');
END generic_procedure;
/

但您也可以将其作为参数传递给过程。这似乎对我来说有点清洁。由于该过程不依赖于在其之外声明或已经声明的某个变量。它只适用于参数。

create or replace PROCEDURE generic_procedure( v_data IN varchar2,
                                               v_typename IN VARCHAR2,
                                               v_path IN VARCHAR2 DEFAULT '$') IS
BEGIN
   dbms_output.put_line(v_data);
END generic_procedure;
/

exec generic_procedure('&jdata','typename');

Here's更多关于sqlplus中的变量