ORACLE中执行的SQL语句中的参数该如何调用?

fengzhou8417 2010-05-01 11:54:28
以前一直是用SQL,现在换ORACLE发现很多语法不一样。
我在定义存储过程时定义了一个NODE IN,作为用户输入的节点号,然后再调用时,我写了:
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'

执行的时候这里总报错,请问是我调用参数的格式有问题么?
...全文
559 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
半世码农 2010-05-03
  • 打赏
  • 举报
回复
学习!
fengzhou8417 2010-05-02
  • 打赏
  • 举报
回复
多谢了,兄弟,我想知道我下面这个SQL里调用NODE这个参数的格式对吗?
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = NODE'

定义的部分我已经在存储过程开始部分写了,都调试通过了,就是卡在这里
xieyu_zy 2010-05-02
  • 打赏
  • 举报
回复
这问题描述得没两句看懂了,呵呵。。。

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

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

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

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

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

若运行时报错报ORA-数字错误号码,则是抛出的异常信息,细节在说下去能说到天亮了。
codearts 2010-05-02
  • 打赏
  • 举报
回复
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE'; --这个:NODE是个绑定变量

execute immdate sql_exec using NODE; --这个NODE是个变量
zjwssg 2010-05-02
  • 打赏
  • 举报
回复
同意楼上的
iihero_ 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengzhou8417 的回复:]

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

定义的部分我已经在存储过程开始部分写了,都调试通过了,就是卡在这里
[/Quote]
SELECT * FROM TABLE WHERE ID = NODE中的NODE应该是一个变量值,是字符串类型的?
如果是,应该把它串起来。
另外,你最好给一个简单的完整示例重现你的问题。
xieyu_zy 2010-05-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 codearts 的回复:]
SQL_EXEC := 'SELECT * FROM TABLE WHERE ID = :NODE'; --这个:NODE是个绑定变量

execute immdate sql_exec using NODE; --这个NODE是个变量
[/Quote]

楼上本来已经说完了,不过发现执行部分少写了两个字母,可能写快了,呵呵。

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过不去。。。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧