解决在 Oracle Apex DB 中获取用户输入中的错误

问题描述 投票:0回答:1
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:  ';
database oracle plsql oracle-apex procedure
1个回答
0
投票

嗯,你发布的内容真是一团糟,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>
© www.soinside.com 2019 - 2024. All rights reserved.