【问题标题】:PHP 7.2 OCI8 Oracle 9i Error on PL/SQL Code: ORA-06550: line 1, column 7: PLS-00103: Encountered the symbol ""PHP 7.2 OCI8 Oracle 9i PL/SQL 代码错误:ORA-06550:第 1 行,第 7 列:PLS-00103:遇到符号“”
【发布时间】: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


【解决方案1】:

根据https://www.php.net/manual/en/function.oci-parse.php的文档

你不包括决赛;它是隐含的

例如他们的例子是

$stid = oci_parse($conn, 'SELECT * FROM employees');

尝试删除决赛;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多