Oracle 重复打开和关闭同一个游标。出现了什么错误?在预期以下情况之一时遇到了符号“文件结束”:begin function pragma Procedure,我正在处理的所有过程都出现了此错误,不知道该怎么办:(如果要在异常PL/SQL块中创建过程,则需要删除过程
Oracle 重复打开和关闭同一个游标。出现了什么错误?在预期以下情况之一时遇到了符号“文件结束”:begin function pragma Procedure,我正在处理的所有过程都出现了此错误,不知道该怎么办:(如果要在异常PL/SQL块中创建过程,则需要删除过程,oracle,plsql,Oracle,Plsql,重复打开和关闭同一个游标。出现了什么错误?在预期以下情况之一时遇到了符号“文件结束”:begin function pragma Procedure,我正在处理的所有过程都出现了此错误,不知道该怎么办:(如果要在异常PL/SQL块中创建过程,则需要删除过程的/结束;后的/。如果要创建独立过程,请参阅user76ponic的答案。您还有几个无效的select语句:例如从名称中选择名称或从surn中选择姓氏。)ame@如果您有一个名为name的表,该表包含一个名为name的列,则带有\u no\u
重复打开和关闭同一个游标。出现了什么错误?在预期以下情况之一时遇到了符号“文件结束”:begin function pragma Procedure,我正在处理的所有过程都出现了此错误,不知道该怎么办:(如果要在异常PL/SQL块中创建过程,则需要删除过程的
/
结束;后的/
。如果要创建独立过程,请参阅user76ponic的答案。您还有几个无效的select语句:例如从名称中选择名称或从surn中选择姓氏。)ame
@如果您有一个名为name
的表,该表包含一个名为name
的列,则带有\u no\u name的\u horse\u是有效的。将它们都称为同一事物不是特别好的做法,但它是有效的。您遇到了什么错误?遇到了符号“文件结束”当预期出现以下情况之一时:begin function pragma procedureand我正在处理的所有过程都会出现此错误,我不知道该怎么办:(如果要在异常PL/SQL块中创建过程,则需要删除过程的/
结束;
后的/
。如果要创建独立过程,请参阅user76ponic的答案。您还有几个无效的select语句:例如从名称中选择名称或从surn中选择姓氏。)ame
@如果您有一个名为name
的表,该表包含一个名为name
的列,那么带有\u no\u name的\u horse\u是有效的。将它们都称为同一事物不是特别好的做法,但它是有效的。该过程是在匿名PL/SQL块中声明的,而不是在SQL作用域soCRE中声明的此处不需要ATE或REPLACE
。该过程是在匿名PL/SQL块中声明的,不在SQL范围内,因此此处不需要创建或替换
。如果我在过程中声明变量,我必须这样声明:v_nr NUMBER(10);或仅v_nr NUMBER;v_nr NUMBER(10)
或者这将允许您模拟NOTE
表中NR\u列
列的数据类型:v\u NR NOTE.NR\u列%TYPE;
。如果我在过程中声明变量,我必须这样声明:v\u NR NUMBER(10);或者仅仅是v\u NR NUMBER;v\u NR NUMBER(10)
或者这将允许您模拟NOTE
表中NR NOTE.NR\u列%TYPE;
中NR\u列的数据类型。
DROP TABLE grade
/
CREATE TABLE grade (grade CHAR(2))
/
INSERT INTO grade VALUES ('A1');
INSERT INTO grade VALUES ('A2');
INSERT INTO grade VALUES ('A3');
INSERT INTO grade VALUES ('A4');
INSERT INTO grade VALUES ('A5');
INSERT INTO grade VALUES ('A6');
INSERT INTO grade VALUES ('A7');
INSERT INTO grade VALUES ('B1');
INSERT INTO grade VALUES ('B2');
INSERT INTO grade VALUES ('B3');
INSERT INTO grade VALUES ('B4');
INSERT INTO grade VALUES ('B5');
INSERT INTO grade VALUES ('B6');
INSERT INTO grade VALUES ('B7');
commit;
set serveroutput on
DECLARE
v_contor INTEGER := 1;
v_nr NUMBER(10);
v_name VARCHAR2(20);
v_surname VARCHAR2(20);
v_year NUMBER(2);
v_grade VARCHAR2(20);
v_scholarship NUMBER(4);
v_nota NUMBER(2);
PROCEDURE insert_data IS
cursor c1 is
select name from(select name from name
order by dbms_ryeardom.value)
where rownum =1;
cursor c2 is
select surname from(select surname from surname
order by dbms_ryeardom.value)
where rownum =1;
cursor c3 is
select grade from(select grade from grade
order by dbms_ryeardom.value)
where rownum =1;
BEGIN
v_nr := 124;
WHILE v_contor <= 2000 LOOP
open c1;
open c2;
open c3;
LOOP
fetch c1 into v_name;
exit when c1%notfound;
END loop;
LOOP
fetch c2 into v_surname;
exit when c2%notfound;
END loop;
LOOP
fetch c3 into v_grade;
exit when c3%notfound;
END loop;
v_year := round(dbms_ryeardom.value(1,3));
v_scholarship := round(dbms_ryeardom.value(250,450));
INSERT INTO studenti VALUES (v_nr, INITCAP(v_name), v_surname, v_year, v_grade, v_scholarship, NULL);
IF (v_year = 2) THEN
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 21, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 22, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 23, v_nota, NULL);
END if;
IF (v_year = 3) THEN
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 21, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 22, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 23, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 24, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 25, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 26, v_nota, NULL);
v_nota := round(dbms_ryeardom.value(4,10));
INSERT INTO note VALUES (v_nr, 29, v_nota, NULL);
END if;
v_nr := v_nr + 1;
v_contor := v_contor + 1;
close c1;
close c2;
close c3;
END loop;
END;
/
BEGIN
insert_data;
END;
/
Create or replace procedure AS
procedure IS
v_contor INTEGER := 1;
v_nr NUMBER(10);
v_name VARCHAR2(20);
v_surname VARCHAR2(20);
v_year NUMBER(2);
v_grade VARCHAR2(20);
v_scholarship NUMBER(4);
v_nota NUMBER(2);
create or replace PROCEDURE insert_data AS
v_grade VARCHAR2;
v_scholarship NUMBER;
v_nota NUMBER;
....
END;
/
BEGIN
insert_data;
END;
/
END;
/
BEGIN
execute(insert_data);
END;
/
DECLARE
...
BEGIN
...
END;
/
PROCEDURE name IS ... BEGIN ... END;
CREATE [OR REPLACE] PROCEDURE name IS ... BEGIN ... END;
/