Oracle, causing PL / SQL problems from SQL-Plus x.sql file, says my_function "cannot be a function",

it’s so simple if I create my function as CREATE OR REPLACE FUNCTION MD5_ENCODE, it will work smoothly, but if it remains anonymous in the SQL-Plus block, because the PL / SQL error → "may not be a function".

What is this Oracle feature again?

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   
+3
source share
4 answers

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

There are a few things that could be.

# 1, SQL, , . SQL, . , SQL , .


, , CREATE REPLACE FUNCTION MD5ENCODE (IN_TEXT IN VARCHAR2) RETURN VARCHAR2 IS...

+5

SQL, . SQL PL/SQL, .

, , PL/SQL .

+4

, .

MD5_ENCODE (CLEARTEXT IN VARCHAR2) RETURN VARCHAR2 IS

UPDATE ADDRESSES_T SET STREET = MD5ENCODE (STREET);

.

, :

PLS-00231: function 'MD5_ENCODE' may not be used in SQL

, Update.

0

, .

DECLARE
  V NUMBER := 0;
  FUNCTION GET_SQ(A NUMBER) RETURN NUMBER AS
  BEGIN
    RETURN A * A;
  END;
BEGIN
  V := GET_SQ(5);
  --DBMS_OUTPUT.PUT_LINE(V);
  UPDATE MYTABLE A SET A.XCOL = V;
END;
0

Source: https://habr.com/ru/post/1707960/


All Articles