Oracle,在SQL-Plus文件x.sql中调用PL/SQL问题说my_function"可能不是函数"

yli*_*yli 3 oracle plsql sqlplus function

如此简单,如果我创建我的函数,因为CREATE OR REPLACE FUNCTION MD5_ENCODE它将顺利运行,但如果它在SQL-Plus块中匿名保持为PL/SQL - >"可能不是函数"错误.

这个Oracle"功能"又是什么?

DECLARE

FUNCTION MD5_ENCODE(CLEARTEXT IN VARCHAR2) RETURN VARCHAR2 IS    
    CHK VARCHAR2(16);   
    HEX VARCHAR2(32);  
    I   INTEGER;  
    C   INTEGER;  
    H   INTEGER;  
BEGIN
    IF CLEARTEXT IS NULL THEN
        RETURN '';
    ELSE
        CHK := DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING
=> CLEARTEXT);
        FOR I IN 1 .. 16 LOOP
            C := ASCII(SUBSTR(CHK, I, 1));
            H := TRUNC(C / 16);
            IF H >= 10 THEN
                HEX := HEX || CHR(H + 55);
            ELSE
                HEX := HEX || CHR(H + 48);
            END IF;
            H := MOD(C, 16);
            IF H >= 10 THEN
                HEX := HEX || CHR(H + 55);
            ELSE
                HEX := HEX || CHR(H + 48);
            END IF;
        END LOOP;  
        RETURN HEX;  
    END IF;  

END;  

BEGIN  
    UPDATE ADDRESSES_T SET STREET = MD5ENCODE(STREET) ;  

-- etc...  
END   
Run Code Online (Sandbox Code Playgroud)

yli*_*yli 5

http://forums.oracle.com/forums/thread.jspa?threadID=245112

可能有很多事情.

我的#1候选者是,我们只能在公共的SQL语句中使用函数,即在包规范中声明.即使对于在同一Package Body中执行的SQL语句也是如此.共鸣是SQL语句由不同的引擎执行,该引擎只能看到公开声明的函数.


长话短说,函数必须在包中定义,比如CREATE OR REPLACE FUNCTION MD5ENCODE(IN_TEXT IN VARCHAR2)RETURN VARCHAR2 IS ...