【问题标题】:Error when trying to create procedure, why do you think that is?尝试创建程序时出错,您认为这是为什么?
【发布时间】:2016-12-08 14:17:56
【问题描述】:

全部。

我尝试在 Oracle Apex 5 中创建一个过程。但是,我收到了这个问题“ORA-24344:编译错误成功”。我认为这是一个语法错误。你觉得它是什么? *generate_password 是一个产生随机十六进制值/字符串的工作函数。

CREATE OR REPLACE PROCEDURE add_user (firstname in varchar2(20), lastname in varchar2(20), email in varchar2(100), area in varchar2(50), privileges in varchar2(2))
AS
e varchar2(100);
BEGIN

e := generate_password;

insert into user_login (user_name, first_name, last_name, creation_date, last_update_date,  user_privileges, user_pwd)

values ( email, firstname, lastname, SYSDATE, SYSDATE, privileges , e); 

END add_user;

【问题讨论】:

  • 试试e := generate_password() ;
  • 'ORA-24344: 编译错误成功' 我之前使用过没有 () 的函数,它可以工作。只是没有把程序放在一起。很奇怪。
  • 请贴出实际的编译错误。
  • 这就是你的意思>> ADD_USER PROCEDURE LINE 1 POSITION 42 PLS-00103:在期望以下之一时遇到符号“(”::=。),@%默认字符符号“ :=" 被替换为 "(" 以继续。
  • 好的!!!不要定义过程的 varchar2 参数的长度。只需写VARCHAR2 不带大小。

标签: oracle plsql oracle-apex oracle-apex-5


【解决方案1】:

不要定义过程的 varchar2 参数的长度。只需写无大小的 VARCHAR2。

这是 PL/SQL 的语法。如果您考虑一下,这比定义从调用代码继承的缓冲区的长度更有意义。

【讨论】:

    【解决方案2】:

    您正在尝试设置 varchar2 输入参数的最大长度 - 这不是有效的语法。

    试试:

    CREATE OR REPLACE PROCEDURE add_user (firstname in varchar2, lastname in varchar2, email in varchar2, area in varchar2, privileges in varchar2)
    

    【讨论】:

      【解决方案3】:

      伙计,你应该再读一遍 PLSQL 文档。

      1. 您不需要在存储过程中指定参数的长度。
      2. Oracle 建议在子程序中使用引用参数,例如“p_empid employees.employee_id%TYPE”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        相关资源
        最近更新 更多