日期:2014-05-17  浏览次数:20929 次

ORACLE中执行的SQL语句中的参数该如何调用?
以前一直是用SQL,现在换ORACLE发现很多语法不一样。
我在定义存储过程时定义了一个NODE IN,作为用户输入的节点号,然后再调用时,我写了:
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'

执行的时候这里总报错,请问是我调用参数的格式有问题么?

------解决方案--------------------
这问题描述得没两句看懂了,呵呵。。。

你是换ORACLE是吧,以前用SQL SERVER吧,你是说定义了存储过程嘛?然后参数为:NODE,然后是传入参数是吧,那么存储过程调用方式和普通SQL是不一样的。

首先你是在那里调用的,应用程序还是直接调用数据库的,应用程序需要使用(如JAVA程序):
{call 过程名称(?,?)}

如果使用PL/SQL代码段块调用(打印输出信息,查看第三方工具提供的OUTPUT区):
BEGIN
过程名称(参数);
END;

如果是在SQL命令行下这样执行(也可以直接用EXEC即可):
SQL>execute 过程名称(参数);
如果有打印输出信息,在调用过程前,先执行命令:set serveroutput on;

调用过程报错,如果错误你觉得是些“鸟文”(几乎人类看不懂的那种),有两种可能性:
1、过程有问题
2、内部运行时调用了动态SQL,动态SQL执行时报错。

若运行时报错报ORA-数字错误号码,则是抛出的异常信息,细节在说下去能说到天亮了。
------解决方案--------------------
探讨

多谢了,兄弟,我想知道我下面这个SQL里调用NODE这个参数的格式对吗?
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'

定义的部分我已经在存储过程开始部分写了,都调试通过了,就是卡在这里

------解决方案--------------------
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE'; --这个:NODE是个绑定变量

execute immdate sql_exec using NODE; --这个NODE是个变量
------解决方案--------------------
探讨
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE'; --这个:NODE是个绑定变量

execute immdate sql_exec using NODE; --这个NODE是个变量