我是 Oracle 的新手。当我执行以下语句时
BEGIN
EXECUTE IMMEDIATE 'SELECT * FROM DUAL;';
END;
/
我得到错误为
命令中从第 2 行开始出错 - 立即开始执行
'从双选择 *;';结尾;
错误报告 - ORA-00911: 无效
ORA-06512: 字符位于第 2 行
00911. 00000 - “无效字符”
*原因:标识符不能以除
字母和数字。 $##_ 也可以在第一个之后
特点。用双引号括起来的标识符可能包含
除双引号之外的任何字符。替代报价
(q'#...#') 不能使用空格、制表符或回车符作为
分隔符。对于所有其他上下文,请参阅 SQL 语言
参考手册。
*行动:
问题是;
中的人物'SELECT * FROM DUAL;'
.
From 文档 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm:
execute_immediate_statement ::=
EXECUTE_IMMEDIATE dynamic_string
{
INTO { define_variable [, define_variable ...] | record_name }
| BULK COLLECT INTO { collection_name [, collection_name ...] | :host_array_name }
}
[ USING [ IN | OUT | IN OUT ] bind_argument
[, [ IN | OUT | IN OUT ] bind_argument] ... ] [ returning_clause ] ;
... 在哪里dynamic_string
是(强调我的):
表示的字符串文字、变量或表达式单个 SQL
陈述 or PL/SQL 块。它必须是 CHAR 或 VARCHAR2 类型,而不是
NCHAR 或 NVARCHAR2。
由于它不会接受多个语句,除非将它们包含在单个 PL/SQL 块中,因此;
不需要分隔符。
有更好的解释在在 PL/SQL 中使用 EXECUTE IMMEDIATE 语句 http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/dynamic.htm#i13130:
在动态字符串中构造单个 SQL 语句时,不要
在引号内末尾添加分号 (;)。什么时候
构建 PL/SQL 匿名块,在块中包含分号
每个 PL/SQL 语句的末尾和匿名块的末尾;
字符串末尾之前会有一个分号
文字,另一个位于右单引号后面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)