gpt4 book ai didi

Oracle,从 SQL-Plus 文件 x.sql 中调用 PL/SQL 问题说 my_function "may not be a function"

转载 作者:行者123 更新时间:2023-12-02 06:39:14 24 4
gpt4 key购买 nike

如此简单,如果我将函数创建为CREATE OR REPLACE FUNCTION MD5_ENCODE,它将顺利运行,但如果它像 PL/SQL 那样匿名地保留在 SQL-Plus block 中 -->“可能不会是一个函数”错误。

这个 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

最佳答案

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

可能有很多事情。

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

<小时/>

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

关于Oracle,从 SQL-Plus 文件 x.sql 中调用 PL/SQL 问题说 my_function "may not be a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com