【发布时间】:2020-01-30 22:13:59
【问题描述】:
感谢您给予我的帮助。
我在使用 PHP 7.2 中的 OCI8 和 Oracle 9i 中的 PL/SQL 语句时遇到问题。我正在使用 oracle 即时客户端 11.2。
SQL:
BEGIN
DBMS_OUTPUT.put_line('¡Hola Mundo!');
END;
PHP:
$rs = oci_parse($conn, $SqlCode);
$RExec = @oci_execute($rs);
错误:
ORA-06550:第 1 行,第 7 列:PLS-00103:遇到符号“”时 期待以下情况之一:begin case declare exit for goto if loop mod null pragma raise return select update while with ORA-06550: 第 2 行第 42 列:PLS-00103:预期时遇到符号“” 以下之一: 开始 case 声明 goto 结束异常退出 if loop mod null pragma raise return select update while with
我在 Oracle 9i 中的所有 PL/SQL 语句都有问题,但如果我尝试像“SELECT * FROM some_table”这样的基本语句,它可以正常工作。
如果我在 Oracle 10 和 11 数据库中执行相同的 PL/SQL 语句,它可以正常工作。
2020-02-04 更新:
我有一个 PHP 门户,它有一个表单可以将脚本(PL / SQL Oracle)保存在 MYSQL 数据库中,然后在另一个视图中我选择要执行的脚本,所以我得到了脚本(PL / SQL) 我想在 Oracle 数据库中运行。
锁定问题,我发现如果我从MYSQL数据库中读取PL/SQL代码或脚本然后执行,我得到错误"ORA-06550: line 1, column 7: PLS- 00103:遇到符号“,但是如果我把代码直接存储在PHP文件中的变量中,它会正确执行。
所以当我插入或查询MYSQL数据库以获取我打算在Oracle数据库中执行的pl/sql代码时,问题一定是一些字符编码问题。
谢谢。
【问题讨论】:
-
你如何声明/设置
$SqlCode?从报告的错误位置来看,我想知道这是否是换行/回车问题。 -
@AlexPoole $SqlCode = "BEGIN DBMS_OUTPUT.put_line('¡Hola Mundo!'); END;";仅此而已。
-
@AlexPoole 我在问题中添加了更多信息。
-
那我真的帮不上忙;我建议您检查从 My SQL 检索到的值,以查看是否添加了任何不可见/无效字符,检查两个连接的字符集,也许尝试将相同的 PL/SQL 块存储为单行(无换行符)看看这是否有效。不过,我们实际上无法提供帮助,您需要在门户上对其进行调试,以查看正在存储/接收/执行的内容。一旦你知道发生了什么,有人可能会帮助你避免它,可能是通过一个新问题。
标签: mysql plsql php-7.2 oracle9i oci8