26. november 2000 - 22:33Der er
4 kommentarer og 1 løsning
problemer med FUNCTION i SQL*Plus 3.3.2.0.1
Jeg opretter en funktion således:
CREATE OR REPLACE FUNCTION ascii_str (str IN VARCHAR2) RETURN NUMBER IS var_samlet NUMBER; var_ascii_vaerdi NUMBER(3); var_laengde NUMBER(LENGTH(str)) := LENGTH(str); var_enkelt_tegn CHAR(1); BEGIN IF str := NULL THEN RETURN 0; END IF;
var_samlet := 0; FOR i IN var_laengde LOOP var_enkelt_tegn := SUBSTR(str,i,var_laengde); var_ascii_vaerdi := ASCII(var_enkelt_tegn); var_samlet := var_samlet + var_ascii_vaerdi; END LOOP;
RETURN var_samlet;
END; / commit; som svar skriver den:
Warning: Function created with compilation errors.
Derefter forsøger jeg at teste denne funktion, ved hjælp af denne kode:
DROP TABLE uddata;
CREATE TABLE uddata (data VARCHAR2(300)); DECLARE var_et VARCHAR2(300); var_input VARCHAR(300); BEGIN var_input := \'&skriv_her\'; var_et := ascii_str(var_input); INSERT INTO uddata VALUES (var_et); END; / SELECT * FROM uddata;
Så giver den mig følgende svar:
---(her intaster jeg bare en test værdi) Enter value for skriv_her: hejsa
old 5: var_input := \'&skriv_her\'; new 5: var_input := \'hejsa\'; var_et := ascii_str(var_input); * ERROR at line 6: ORA-06550: line 6, column 11: PLS-00905: object SCOTT.ASCII_STR is invalid ORA-06550: line 6, column 1: PL/SQL: Statement ignored
no rows selected
Hvor scott er mit bruger navn....Hvad gør jeg galt? den vil ikke kendes ved min funktion?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
CREATE OR REPLACE FUNCTION ascii_str (str IN VARCHAR2) RETURN NUMBER IS var_samlet NUMBER(10); var_ascii_vaerdi NUMBER(3); var_laengde NUMBER(2); var_enkelt_tegn CHAR(1); BEGIN IF str = NULL THEN RETURN 0; END IF;
var_laengde := LENGTH(str); var_samlet := 0; FOR i IN var_laengde LOOP var_enkelt_tegn := SUBSTR(str,i,1); var_ascii_vaerdi := ASCII(var_enkelt_tegn); var_samlet := var_samlet + var_ascii_vaerdi; END LOOP;
RETURN var_samlet;
END; /
Og den giver følgende fejl:
LINE/COL ERROR -------- ----------------------------------------------------------------- 14/1 PL/SQL: Statement ignored 14/10 PLS-00306: wrong number or types of arguments in call to \'VAR_LAENGDE\'
CREATE OR REPLACE FUNCTION ascii_str (str IN VARCHAR2) RETURN NUMBER IS var_samlet NUMBER(10); var_ascii_vaerdi NUMBER(3); var_laengde NUMBER(2); var_enkelt_tegn CHAR(1); BEGIN IF str = NULL THEN RETURN 0; END IF; var_laengde := LENGTH(str); var_samlet := 0; FOR i IN 1..var_laengde LOOP var_enkelt_tegn := SUBSTR(str,i,1); var_ascii_vaerdi := ASCII(var_enkelt_tegn); var_samlet := var_samlet + var_ascii_vaerdi; END LOOP; RETURN var_samlet; END;
Jeg fandt selv fejlen senere her i dag, efter at have brugt show error m.m. som du fortalte om....
Du skal have mange tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.