在 PL/SQL 中编译包时出错。错误(7,1):PLS-00103:遇到符号“CREATE”
Posted
技术标签:
【中文标题】在 PL/SQL 中编译包时出错。错误(7,1):PLS-00103:遇到符号“CREATE”【英文标题】:Error while compiling the package in PL/SQL. Error(7,1): PLS-00103: Encountered the symbol "CREATE" 【发布时间】:2018-07-03 09:27:34 【问题描述】:错误(7,1):PLS-00103:遇到符号“CREATE”。我试着把 / 在创建之前但随后出现错误 Error(6,1): PLS-00103: Encountered 符号“/”。
我是 PL/SQL 编程的新手,请您帮忙。
CREATE OR REPLACE PACKAGE EMP_BULK_INSERT AS
PROCEDURE Bulk_Insert;
END EMP_BULK_INSERT;
/* package body */
CREATE OR REPLACE PACKAGE BODY EMP_BULK_INSERT AS
PROCEDURE Bulk_Insert
AS
/* select all records from source table */
CURSOR kt_test_cur IS
SELECT empid
, empband
, empname
, workexp
, salary
from kt_test;
/* create nested table type and variable that will hold BIG_TABLE's records */
TYPE kt_test_ntt IS TABLE OF kt_test_cur%ROWTYPE;
l_kt_test kt_test_ntt;
BEGIN
/* open pointer to SELECT statement */
OPEN kt_test_cur;
/* collect data in the collection */
FETCH kt_test_cur BULK COLLECT INTO l_kt_test;
/* close the pointer */
CLOSE kt_test_cur;
/* print size of the collection */
DBMS_OUTPUT.PUT_LINE('Nested table holds: ' || TO_CHAR(l_kt_test.COUNT) || ' records.');
/* write data down to target table */
FORALL indx IN l_kt_test.FIRST..l_kt_test.LAST
INSERT INTO kt1_test(empid,empband,empname,workexp,salary)
VALUES (l_kt_test(indx).empid,l_kt_test(indx).empband,l_kt_test(indx).empname,l_kt_test(indx).workexp,l_kt_test(indx).salary);
DBMS_OUTPUT.PUT_LINE('Number of rows inserted ' || SQL%ROWCOUNT || ' rows');
COMMIT;
END Bulk_Insert;
END EMP_BULK_INSERT;
【问题讨论】:
你是怎么运行这个的? SQLPLUS, SQLDeveloper, .. ? 我正在通过 SQL Developer 运行。 【参考方案1】:“/”需要单独在一个空行上。 像这样:
CREATE OR REPLACE PACKAGE abc AS
...
END;
/
CREATE OR REPLACE PACKAGE BODY abc AS
...
END;
/
“/”的意思是执行命令缓冲区。在这种情况下,它会执行前一个 PL/SQL 块。
有关此主题的更深入讨论,请参阅此处 stack overflow
【讨论】:
我在规范和正文中都添加了 / 。但现在错误是“Error(6,1): PLS-00103: Encountered the symbol "/" " 当我在 SQL developer 中将此代码作为 s 脚本运行时,它工作并成功编译,但作为包代码它有相同的错误。但它也应该在这里工作。有什么解决办法吗? 当我试图编译整个包时,我得到了上述错误。但是当我将这个包的所有内容复制并粘贴到一个单独的工作表中时,它被编译了。 你如何尝试编译包?请注意:“/”不是包代码的一部分。它只是告诉前端,如 SQLPlus 或 SQL开发人员工作表,PL/SQL 块在哪里结束。 如果你通过实际的问题,我试图编译一个没有'/'的包,然后我得到错误为'Error(7,1):PLS-00103:遇到符号“CREATE “。'。然后根据建议我输入'/',在创建之前我得到错误'错误(6,1):PLS-00103:遇到符号“/”'。因此,我使用“/”将代码粘贴到单独的工作表中。然后它工作了。但我想编译没有 '/' 的包。【参考方案2】:如果你想通过 SQL Developer 的专用对象视图来操作包,你必须将包 def 和 body 分开,并在两者中都使用“/”:
首先编译包规范(不带“/”)。然后在带有小包图标(编译图标左侧)的单独标签页中打开正文。编辑你的正文代码并在那里编译(同样,没有“/”)。
【讨论】:
谢谢,这有帮助。 不客气!请。用绿色复选标记将答案标记为已回答,这样人们就可以专注于未解决的问题。谢谢。以上是关于在 PL/SQL 中编译包时出错。错误(7,1):PLS-00103:遇到符号“CREATE”的主要内容,如果未能解决你的问题,请参考以下文章