以前一直是用SQL,现在换ORACLE发现很多语法不一样。
我在定义存储过程时定义了一个NODE IN,作为用户输入的节点号,然后再调用时,我写了:
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'执行的时候这里总报错,请问是我调用参数的格式有问题么?
我在定义存储过程时定义了一个NODE IN,作为用户输入的节点号,然后再调用时,我写了:
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'执行的时候这里总报错,请问是我调用参数的格式有问题么?
{call 过程名称(?,?)}如果使用PL/SQL代码段块调用(打印输出信息,查看第三方工具提供的OUTPUT区):
BEGIN
过程名称(参数);
END;如果是在SQL命令行下这样执行(也可以直接用EXEC即可):
SQL>execute 过程名称(参数);
如果有打印输出信息,在调用过程前,先执行命令:set serveroutput on;调用过程报错,如果错误你觉得是些“鸟文”(几乎人类看不懂的那种),有两种可能性:
1、过程有问题
2、内部运行时调用了动态SQL,动态SQL执行时报错。若运行时报错报ORA-数字错误号码,则是抛出的异常信息,细节在说下去能说到天亮了。
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'定义的部分我已经在存储过程开始部分写了,都调试通过了,就是卡在这里
如果是,应该把它串起来。
另外,你最好给一个简单的完整示例重现你的问题。
楼上本来已经说完了,不过发现执行部分少写了两个字母,可能写快了,呵呵。SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE';
execute immediate sql_exec using NODE;ORACLE内部语法,任意一个字符串前面假如英文冒号(字符串是什么没有关系),代表这个外部变量(和赋值无关),若用于动态SQL,要将参数传入就按照这些顺序使用USING 变量即可,若为两个参数就为:
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE AND name = :name1';
execute immediate SQL_EXEC using NODE,name;前提是 NODE和name这两个变量你已经定义好了。execute immediate 为执行语法,没有参数就不用USING即可,有参数按顺序进去。
每条语句结束后面记得带分号哈,你给的SQL没有,PL/SQL过不去