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)
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 ...