Oracle 在PL/SQL中,您已经创建了一个新函数,其标题和声明部分如下

Oracle 在PL/SQL中,您已经创建了一个新函数,其标题和声明部分如下,oracle,plsql,Oracle,Plsql,职能员工加入日期 (p_emp_id编号) 返回日期 是 v_emp_加入日期; 开始 编译器对此函数不接受以下哪条语句 返回系统日期 返回(“未找到日期”) 返回v_日期 这些都不是 第三,因为oracle在编译时检查未声明的变量。第二个将仅在运行时返回强制转换错误。答案可以是3或4: 备选案文1: 创建或替换功能员工加入日期( p_emp_id的编号 ) 返回日期 是 v_emp_加入日期; 开始 返回系统日期; 终止 / 编译时没有错误 备选案文2: 创建或替换功能员工加入日期( p_e

职能员工加入日期 (p_emp_id编号) 返回日期 是 v_emp_加入日期; 开始

编译器对此函数不接受以下哪条语句

  • 返回系统日期
  • 返回(“未找到日期”)
  • 返回v_日期
  • 这些都不是

  • 第三,因为oracle在编译时检查未声明的变量。第二个将仅在运行时返回强制转换错误。

    答案可以是3或4:

    备选案文1:
    创建或替换功能员工加入日期(
    p_emp_id的编号
    )
    返回日期
    是
    v_emp_加入日期;
    开始
    返回系统日期;
    终止
    /
    
    编译时没有错误

    备选案文2:
    创建或替换功能员工加入日期(
    p_emp_id的编号
    )
    返回日期
    是
    v_emp_加入日期;
    开始
    返回(“未找到日期”);
    终止
    /
    
    编译时没有错误

    如果您尝试执行该过程:

    声明
    v_日期;
    开始
    v_日期:=员工加入日期(1);
    DBMS_OUTPUT.PUT_LINE(到_CHAR(v_date,'YYYY-MM-DD'));
    终止
    /
    
    然后它将输出一个异常:

    但是,这是一个运行时异常,而不是编译时错误

    但是,如果你做了一些相当愚蠢的事情:

    ALTER SESSION SET NLS_DATE_FORMAT='“找不到日期”;
    
    然后PL/SQL块和函数无错误运行,并输出当月的第1天:

    备选案文3,第1版:
    创建或替换功能员工加入日期(
    p_emp_id的编号
    )
    返回日期
    是
    v_emp_加入日期;
    开始
    返回v_日期;
    终止
    /
    
    给出以下编译时错误:

    从用户错误中选择*;
    
    然后它编译并运行,没有错误

    如果您使用选项3的第二个版本,并在嵌套块中声明
    v#u date
    ,那么答案是#4;但是,如果您天真地使用
    返回v_date没有delcaring
    v#u date
    那么答案是#3

    小提琴

    ORA-01858: a non-numeric character was found where a numeric was expected
    ORA-06512: at "FIDDLE_BUISIFXHIMAYWYOGMYBY.EMPLOYEE_JOINING_DATE", line 8
    ORA-06512: at line 4
    
    2020-09-01
    
    NAME | TYPE | SEQUENCE | LINE | POSITION | TEXT | ATTRIBUTE | MESSAGE_NUMBER :-------------------- | :------- | -------: | ---: | -------: | :---------------------------------------------- | :-------- | -------------: EMPLOYEE_JOINING_DATE | FUNCTION | 1 | 8 | 10 | PLS-00201: identifier 'V_DATE' must be declared | ERROR | 201 EMPLOYEE_JOINING_DATE | FUNCTION | 2 | 8 | 3 | PL/SQL: Statement ignored | ERROR | 0