标签: ora-06553

函数返回布尔值失败"表达式类型错误"

我正在使用oracle 11g,我只能站在我的问题所在的地方.我做了很多困难的东西,但是在过去的5小时里,我在这个简单的事情上失败了:

这是功能体

FUNCTION legal_user(
     level_existance  number
    ,types_with_impel number)
RETURN BOOLEAN
 IS
 v_ret_val BOOLEAN;
 BEGIN
   v_ret_val := FALSE;
   IF (level_existance*types_with_impel>0) then 
     v_ret_val := TRUE;
     DBMS_OUTPUT.PUT_LINE('true');
   else 
     DBMS_OUTPUT.PUT_LINE('false');
   END IF;       
  return v_ret_val;
END legal_user;
Run Code Online (Sandbox Code Playgroud)

这是规范:

FUNCTION legal_user(
       level_existance number
       ,types_with_impel number)
   RETURN BOOLEAN;
Run Code Online (Sandbox Code Playgroud)

这符合逻辑和对等

         A*B>0?true:false;   
Run Code Online (Sandbox Code Playgroud)

我得到的错误信息是

ORA-06552:PL/SQL:忽略语句ORA-06553:PLS-382:表达式类型错误06552. 00000 - "PL/SQL:%s"*原因:
*操作:行错误:1列:7


这就是我在IDE中运行它的方法

 SELECT compt_tree_profile_q.legal_user(1,1)
 FROM dual 
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g ora-06553

14
推荐指数
2
解决办法
5万
查看次数

Oracle有一个名为timestamp的字段,为什么创建触发器会失败?

我刚刚浪费了我生命中的最后两个小时试图在本教程中创建一个带有自动递增主键的表,该教程非常棒,我遇到的问题是如果我有一个列,Create Target会失败这是一个时间戳和一个在同一个表中称为时间戳的表...

为什么oracle在创建表时不会将此标记为问题?

这是我输入的命令序列:

  1. 创建表:

    CREATE TABLE myTable
       (id NUMBER PRIMARY KEY,
        field1 TIMESTAMP(6),
        timeStamp NUMBER,
    );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建序列:

    CREATE SEQUENCE test_sequence
    START WITH 1
    INCREMENT BY 1;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建触发器:

    CREATE OR REPLACE TRIGGER test_trigger  
    BEFORE INSERT  
    ON myTable  
    REFERENCING NEW AS NEW  
    FOR EACH ROW  
    BEGIN  
    SELECT test_sequence.nextval INTO :NEW.ID FROM dual;  
    END;  
    /
    
    Run Code Online (Sandbox Code Playgroud)

这是我收到的错误消息:

ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed
Run Code Online (Sandbox Code Playgroud)

没有两行中带有"timestamp"一词的任何组合都可以正常工作.我原以为语法足以区分关键字和列名.

正如我所说,我不明白为什么表创建正常,但当我尝试创建触发器时,oracle会崩溃...

澄清

我知道问题是有一个名为timestamp的列可能是也可能不是关键字.我的问题是为什么当我试图创建一个触发器而不是在我创建表时它被禁止,我至少会预料到一个警告. …

sql oracle ora-06553

5
推荐指数
1
解决办法
4575
查看次数

Oracle:如何调用重载过程?

怎么正确打电话DBMS_OBFUSCATION_TOOLKIT.DESEncrypt?(如果可能,不使用PL/SQL)

select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt('x','y') from dual;
Run Code Online (Sandbox Code Playgroud)

因为DESEncrypt超载而无效:

ORA-06553: PLS-307: Too many declarations of "DESENCRYPT" match this call
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

有没有办法选择DESENCRYPT的一个实现(可能是VARCHAR2变体)来避免这个错误?

sql oracle encryption plsql ora-06553

3
推荐指数
2
解决办法
7167
查看次数

PL/SQL Oracle无误错误

我正在使用SQL Dveloper IDE在Oracle中编写函数.该函数工作正常,当我添加此语句时:

INSERT INTO bl_transaction   
VALUES(generated_id,'0','0','Y',NOW(),'0',NOW(),'0',CAST(dbms_random.value(100,100000) as integer), tuple.billing_id, tuple.created, sys_guid(), first_invgroup, 'Y', 'N', tuple.guid, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); 
Run Code Online (Sandbox Code Playgroud)

编译器给我一个无误的错误:

ORA-06553:PLS-320:此表达式类型的声明不完整或格式错误

我已经审查了每种可能的类型不匹配,参数数量等.

我该如何解决这个问题?

sql oracle ora-06553

1
推荐指数
1
解决办法
98
查看次数

标签 统计

ora-06553 ×4

oracle ×4

sql ×3

plsql ×2

encryption ×1

oracle11g ×1