关键词:
【中文标题】在预期以下情况之一时遇到符号“END”:开始函数杂注过程【英文标题】:Encountered the symbol "END" when expecting one of the following: begin function pragma procedure 【发布时间】:2019-04-14 23:48:32 【问题描述】:我在尝试创建包含程序的包时遇到错误。我需要创建一个全局游标以及 2 个过程和一个函数。
以下是我要回答的问题。 编写一个名为 cursor_state 的包,将全局游标声明为 员工和部门。光标应该选择每个员工的名字和姓氏、部门名称和员工的薪水。该包还应包含三个公共过程:第一个打开游标;第二个有一个 NUMBER 类型的 IN 参数,并获取并显示行数以及循环计数器的当前值。第三个过程关闭游标。请记住在尝试在每个过程中打开或关闭光标之前测试光标的状态。
以及我想出的代码
CREATE OR REPLACE PACKAGE cursor_state IS
CURSOR emp_curs IS
SELECT first_name, last_name, department_name, salary
FROM employees, departments
WHERE employees.department_id = departments.department_id;
PROCEDURE open_curs;
FUNCTION fetch_rows RETURN BOOLEAN;
PROCEDURE close_curs;
END cursor_state;
这是身体的创造
CREATE OR REPLACE PACKAGE BODY cursor_state IS
PROCEDURE open_curs IS
BEGIN
IF NOT emp_curs%ISOPEN THEN OPEN emp_curs;
END IF;
END open_curs;
FUNCTION fetch_rows(n NUMBER := 1) RETURN BOOLEAN IS
emp_first employees.first_name%TYPE,
emp_last employees.last_name%TYPE,
emp_dept employees.department_name%TYPE,
emp_salary employees.salary%TYPE;
BEGIN
FOR count IN 1 .. n LOOP
FETCH emp_curs INTO emp_first, emp_last, emp_dept, emp_salary;
EXIT WHEN emp_curs%NOTFOUND;
DBMS_OUTPUT.PUT_LINE((emp_first), (emp_last), (emp_dept), (emp_salary));
END LOOP;
RETURN emp_curs%FOUND;
END fetch_rows;
PROCEDURE close_curs IS
BEGIN
IF emp_curs%ISOPEN
THEN CLOSE emp_curs;
END IF;
END close_curs;
END cursor_state;
我尝试了很多尝试来更改结束语句的分号和不同位置。无济于事。
【问题讨论】:
我在声明变量时似乎遗漏了一些分号。我将编辑 OP 以包含工作代码。 【参考方案1】:你的代码有太多愚蠢的错误,我已经更正了。仔细观察变化。
包
CREATE OR REPLACE PACKAGE cursor_state IS
CURSOR emp_curs IS
SELECT e.first_name, e.last_name, d.department_name, e.salary
FROM employees e join departments d
ON e.department_id = d.department_id;
PROCEDURE open_curs;
FUNCTION fetch_rows(n NUMBER DEFAULT 1) RETURN BOOLEAN;
PROCEDURE close_curs;
END cursor_state;
/
包体
CREATE OR REPLACE PACKAGE BODY cursor_state IS
PROCEDURE open_curs IS
BEGIN
IF NOT emp_curs%isopen THEN
OPEN emp_curs;
END IF;
END open_curs;
FUNCTION fetch_rows(n NUMBER DEFAULT 1) RETURN BOOLEAN IS
emp_first employees.first_name%TYPE;
emp_last employees.last_name%TYPE;
emp_dept departments.department_name%TYPE;
emp_salary employees.salary%TYPE;
BEGIN
FOR count IN 1 .. n LOOP
FETCH emp_curs INTO
emp_first,emp_last,emp_dept,emp_salary;
EXIT WHEN emp_curs%notfound;
dbms_output.put_line(emp_first||','
||emp_last
||','
||emp_dept
||','
||emp_salary);
END LOOP;
RETURN emp_curs%found;
END fetch_rows;
PROCEDURE close_curs IS
BEGIN
IF emp_curs%isopen THEN
CLOSE emp_curs;
END IF;
END close_curs;
END cursor_state;
/
执行
SET SERVEROUTPUT ON
DECLARE
x BOOLEAN;
BEGIN
cursor_state.open_curs;
x:=cursor_state.fetch_rows(5);
cursor_state.close_curs;
END;
/
结果
Jennifer,Whalen,Administration,4400
Michael,Hartstein,Marketing,13000
Pat,Fay,Marketing,6000
Den,Raphaely,Purchasing,11000
Karen,Colmenares,Purchasing,2500
PL/SQL procedure successfully completed.
【讨论】:
【参考方案2】:在此处使用分号(并使用部门类型,因为您将雇员表与部门表连接起来):
emp_first employees.first_name%TYPE;
emp_last employees.last_name%TYPE;
emp_dept departments.department_name%TYPE;
emp_salary employees.salary%TYPE;
使用管道符号连接:
DBMS_OUTPUT.PUT_LINE(emp_first || ' ' || emp_last || ' ' || emp_dept || ' ' || emp_salary);
在包定义中定义与包体中相同的参数:
FUNCTION fetch_rows(n NUMBER := 1) RETURN BOOLEAN;
然后试试你的代码:
SET SERVEROUTPUT ON
DECLARE
l_ret BOOLEAN;
BEGIN
cursor_state.open_curs;
l_ret := cursor_state.fetch_rows(2);
cursor_state.close_curs;
END;
/
示例输出:
Steven King Executive 24000
Neena Kochhar Executive 17000
PL/SQL procedure successfully completed.
【讨论】:
错误:PLS-00103:在预期以下情况之一时遇到符号“END”
】错误:PLS-00103:在预期以下情况之一时遇到符号“END”【英文标题】:Error:PLS-00103:Encounteredthesymbol"END"whenexpectingoneofthefollowing【发布时间】:2013-03-2306:07:56【问题描述】:我写了以下包和包体:createorreplacepackagediscountsis... 查看详情
在预期以下情况之一时遇到符号“文件结尾”
】在预期以下情况之一时遇到符号“文件结尾”【英文标题】:Encounteredthesymbol"end-of-file"whenexpectingoneofthefollowing【发布时间】:2019-04-2019:56:51【问题描述】:我正在尝试在plsql中打印斐波那契数列这是程序CREATEORREPLACEPROCED... 查看详情
在预期以下情况之一时遇到符号“INTO”
】在预期以下情况之一时遇到符号“INTO”【英文标题】:Encounteredthesymbol"INTO"whenexpectingoneofthefollowing【发布时间】:2019-01-0317:53:07【问题描述】:我在定义函数时遇到以下错误。“:...”我正在从一个网站尝试这个例子... 查看详情
“PLS-00103:在预期以下之一时遇到符号“END”::=。(%;符号“;”被替换为“END”以继续。“
】“PLS-00103:在预期以下之一时遇到符号“END”::=。(%;符号“;”被替换为“END”以继续。“【英文标题】:"PLS-00103:Encounteredthesymbol"END"whenexpectingoneofthefollowing::=.(%;Thesymbol";"wassubstitutedfor"END"tocont... 查看详情
PLS00103:在预期以下情况之一时遇到符号“I”
】PLS00103:在预期以下情况之一时遇到符号“I”【英文标题】:PLS00103:Encounteredthesymbol"I"whenexpectingoneofthefollowing【发布时间】:2017-08-1507:34:11【问题描述】:亲爱的,我想做一个功能来清理我的电话号码,我写了下面的函... 查看详情
Oracle PL-SQL 函数出现错误 PLS-00103:在预期以下情况之一时遇到符号“SELECT”
】OraclePL-SQL函数出现错误PLS-00103:在预期以下情况之一时遇到符号“SELECT”【英文标题】:OraclePL-SQLfunctiongettingerrorPLS-00103:Encounteredthesymbol"SELECT"whenexpectingoneofthefollowing【发布时间】:2020-09-1417:04:03【问题描述】:createorre... 查看详情
错误:PLS-00103:在预期以下情况之一时遇到符号“)”
】错误:PLS-00103:在预期以下情况之一时遇到符号“)”【英文标题】:Error:PLS-00103:Encounteredthesymbol")"whenexpectingoneofthefollowing【发布时间】:2017-12-1405:57:11【问题描述】:当我在PL/SQL开发人员中按F8来创建PackageMyPackage时,... 查看详情
为啥我会收到此错误? PLS-00103:在预期以下情况之一时遇到符号“CREATE”:
】为啥我会收到此错误?PLS-00103:在预期以下情况之一时遇到符号“CREATE”:【英文标题】:WhyamIgettingthiserror?PLS-00103:Encounteredthesymbol"CREATE"whenexpectingoneofthefollowing:为什么我会收到此错误?PLS-00103:在预期以下情况之一时... 查看详情
PLS-00103:在预期以下情况之一时遇到符号“ON”
】PLS-00103:在预期以下情况之一时遇到符号“ON”【英文标题】:PLS-00103:Encounteredthesymbol"ON"whenexpectingoneofthefollowing【发布时间】:2020-07-0516:56:47【问题描述】:请注意:我尝试了其他堆栈溢出问题,但没有一个能解决我... 查看详情
错误:PLS-00103:在预期以下情况之一时遇到符号“AS”:返回
】错误:PLS-00103:在预期以下情况之一时遇到符号“AS”:返回【英文标题】:Error:PLS-00103:Encounteredthesymbol"AS"whenexpectingoneofthefollowing:return【发布时间】:2015-11-2313:52:59【问题描述】:我知道这是另一个“遇到符号...”的... 查看详情
PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;
】PLS-00103:在预期以下情况之一时遇到符号“TEST_PKG”:;【英文标题】:PLS-00103:Encounteredthesymbol"TEST_PKG"whenexpectingoneofthefollowing:;【发布时间】:2015-10-2516:11:32【问题描述】:我收到这个错误错误:检查编译器日志6/3PLS-00... 查看详情
Oracle SP:PLS-00103:在预期以下情况之一时遇到符号“`”:
】OracleSP:PLS-00103:在预期以下情况之一时遇到符号“`”:【英文标题】:OracleSP:PLS-00103:Encounteredthesymbol"`"whenexpectingoneofthefollowing:【发布时间】:2020-06-1610:50:29【问题描述】:EXECUTEIMMEDIATE\'UPDATEGDW_ARC_CDM.LND_DIM_GEOSETDESCRIPT... 查看详情
如何修复“在预期以下情况之一时遇到符号“=”:plsql中的错误
】如何修复“在预期以下情况之一时遇到符号“=”:plsql中的错误【英文标题】:Howtofix\'Encounteredthesymbol"="whenexpectingoneofthefollowing:\'errorinplsql【发布时间】:2019-04-0414:50:22【问题描述】:我正在尝试使用PL/SQL过程从表中... 查看详情
PLS-00103:在预期以下之一时遇到符号“文件结尾”
】PLS-00103:在预期以下之一时遇到符号“文件结尾”【英文标题】:PLS-00103:Encounteredthesymbol"end-of-file"whenexpectingoneofthefollowing【发布时间】:2016-10-1213:17:43【问题描述】:这条PL/SQL语句:FUNCTIONf_comparestring(ps_string1VARCHAR2,ps_... 查看详情
PLS-00103:在 oracle 函数中预期以下之一时遇到符号“IF”
】PLS-00103:在oracle函数中预期以下之一时遇到符号“IF”【英文标题】:PLS-00103:Encounteredthesymbol"IF"whenexpectingoneofthefollowinginoraclefunction【发布时间】:2015-09-3009:06:59【问题描述】:我正在编写以下函数,其中出现PLS-00103:Enc... 查看详情
PLS-00103:遇到符号“;”预期以下情况之一时:
】PLS-00103:遇到符号“;”预期以下情况之一时:【英文标题】:PLS-00103:Encounteredthesymbol";"whenexpectingoneofthefollowing:【发布时间】:2013-11-1821:50:28【问题描述】:我的代码有什么问题SQL>declare2marknumber:=50;3begin4mark:=&mark;5... 查看详情
PLS-00103:遇到符号“;”预期以下情况之一时:。 ( ) * @ % & - + /
】PLS-00103:遇到符号“;”预期以下情况之一时:。()*@%&-+/【英文标题】:PLS-00103:Encounteredthesymbol";"whenexpectingoneofthefollowing:.()*@%&-+/【发布时间】:2015-01-0414:45:03【问题描述】:编译失败,第10行(14:27:16)与编译错误相... 查看详情
ORA-06550 第 10 行,第 41 列:PLS-00103:在预期以下情况之一时遇到符号“,”:
】ORA-06550第10行,第41列:PLS-00103:在预期以下情况之一时遇到符号“,”:【英文标题】:ORA-06550line10,column41:PLS-00103:Encounteredthesymbol","whenexpectingoneofthefollowing:【发布时间】:2015-05-0604:18:35【问题描述】:我正在从C#执行... 查看详情