CREATE OR REPLACE PROCEDURE RegEvent
AS
Attender Attendee%rowtype;
BEGIN
dbms_output.enable;
--set prompt
ACCEPT namee char prompt 'Enter your Name: ';
ACCEPT Attender_id char prompt 'Enter your id: ';
ACCEPT Attender_mail char prompt 'Enter your E-Mail: ';
ACCEPT Attender_phone char prompt 'Enter your Phone No: ';
ACCEPT Att_event prompt char 'Enter the event ID: ';
--Get Values
namee := '&namee';
Attender_Mail := '&Attender_Mail';
Attender_phone := '&Attender_phone';
dbms_output.put_line('Choose any id for future reference: ');
Att_event := '&Att_event';
dbms_output.put_line('Enter the event want to register: ');
Attender_id := '&Attender_id';
Attender.Attendee_name := namee;
Attender.Attendee_mail := Attender_Mail;
Attender.Attendee_phone := Attender_phone;
Attender.Event_id := Att_event;
Attender.Attendee_id := Attender_id;
--Insert Table
INSERT INTO
attendee
VALUES Attender;
--Save Changes
COMMIT;
END RegEvent;
它显示了
Error at line 9: PLS-00103: Encountered the symbol "NAMEE" when expecting one of the following:
:= . ( @ % ;
7. --set prompt
8. ACCEPT namee char prompt 'Enter your Name: ';
9. ACCEPT Attender_id char prompt 'Enter your id: ';
10. ACCEPT Attender_mail char prompt 'Enter your E-Mail: ';
11. ACCEPT Attender_phone char prompt 'Enter your Phone No: ';
嗯,你发布的内容真是一团糟,SQL*Plus、匿名 PL/SQL 块的混合体,无法挽救。
不能将 SQLPlus 命令放入 PL/SQL 过程中;使用它们。另外,您用 Apex 标签标记了问题; SQLPlus 命令在那里不起作用(如果您尝试使用
ORA-00900: invalid SQL statement
,它会报告 accept
)。
这是它在 SQL*Plus 中的工作原理。
首先是示例表:
SQL> create table attendee
2 (name varchar2(10),
3 id number,
4 mail varchar2(20),
5 phone varchar2(10),
6 event number);
Table created.
过程接受参数,然后将其值插入到目标表中:
SQL> create or replace procedure regevent
2 (par_name in attendee.name%type,
3 par_id in attendee.id%type,
4 par_mail in attendee.mail%type,
5 par_phone in attendee.phone%type,
6 par_event in attendee.event%type
7 )
8 is
9 begin
10 insert into attendee (name, id, mail, phone, event)
11 values (par_name, par_id, par_mail, par_phone, par_event);
12 end;
13 /
Procedure created.
获取值:
SQL> ACCEPT par_name char prompt 'Enter your Name: ';
Enter your Name: Little
SQL> ACCEPT par_id char prompt 'Enter your id: ';
Enter your id: 123
SQL> ACCEPT par_mail char prompt 'Enter your E-Mail: ';
Enter your E-Mail: [email protected]
SQL> ACCEPT par_phone char prompt 'Enter your Phone No: ';
Enter your Phone No: 123-456
SQL> ACCEPT par_event char prompt 'Enter the event ID: ';
Enter the event ID: 5588
SQL>
通过提供替换变量的值来调用过程;注意单引号的使用(围绕
varchar2
值):
SQL> set ver off
SQL> begin
2 regevent('&par_name', &par_id, '&par_mail', '&par_phone', &par_event);
3 end;
4 /
PL/SQL procedure successfully completed.
结果:
SQL> select * from attendee;
NAME ID MAIL PHONE EVENT
---------- ---------- -------------------- ---------- ----------
Little 123 [email protected] 123-456 5588
SQL>
如果您使用 Apex,为什么不创建交互式报告(用于查看该表中的值)和表单(用于插入/编辑值)的组合?这就是 Apex best 的用途。
如果您坚持使用 SQL Workshop,则创建一个过程并通过提供值来调用它立即,而无需要求用户(实际上是您自己 - 没有最终用户会看到 SQL Workshop)提供值:
SQL> begin
2 regevent('Foot', 421, '[email protected]', '9887-23', 43);
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> select * From attendee;
NAME ID MAIL PHONE EVENT
---------- ---------- -------------------- ---------- ----------
Little 123 [email protected] 123-456 5588
Foot 421 [email protected] 9887-23 43
SQL>