4 Stimmen

PL/SQL erhalten: numerischer oder Wert-Fehler: Fehler bei der Umwandlung von Zeichen in Zahlen

Ich erhalte diese Fehlermeldung:

ORA-06502: PL/SQL: Zahlen- oder Wertfehler: Fehler bei der Umwandlung von Zeichen in Zahlen ORA-06512: in Zeile 146 06502. 00000 - "PL/SQL: numerischer oder Wert-Fehler%s"

Und hier ist mein Code:

   SET SERVEROUTPUT ON;

DECLARE
    SearchId NUMBER := 0;
    SearchMethod VARCHAR2(100) := '';
    CritExpression VARCHAR2(100) := '';
    SubstringStartPosition NUMBER := 0;
    SubstringLength NUMBER := 0;
    CritDescription VARCHAR2(100) := '';
    CriteriaSequenceId NUMBER := 1;
    CriteriaId NUMBER := 0;
    CritCount NUMBER := 0;

FUNCTION InsertSrchCriteria
(
    SearchMethod IN VARCHAR2,
    CritExpression IN VARCHAR2,
    SubstringStartPosition IN NUMBER,
    SubstringLength IN NUMBER,
    CritDescription IN VARCHAR2,
    CriteriaSequenceId IN NUMBER,
    SearchId IN NUMBER
)
    RETURN NUMBER
IS
    C_Id NUMBER := 0;
BEGIN
    SELECT COUNT (*) INTO CritCount FROM criteria_table WHERE search_id = SearchId AND criteria_sequence_id = CriteriaSequenceId;

    IF CritCount = 0
    THEN
        INSERT INTO criteria_table
            (
                criteria_sequence_id,
                search_id,
                search_method,
                expression,
                substring_start_position,
                substring_length,
                description
            )
            VALUES
            (
                CriteriaSequenceId,
                SearchId,
                SearchMethod,
                CritExpression,
                SubstringStartPosition,
                SubstringLength,
                CritDescription
            )
            RETURNING criteria_id INTO C_Id;
        IF C_Id > 0
        THEN
            DBMS_OUTPUT.PUT_LINE ('Inserted ' || 'SearchId: ' || SearchId || ' @' || CriteriaSequenceId || ' successfully');
        ELSE
            DBMS_OUTPUT.PUT_LINE ('Not Inserted ' || 'SearchId: ' || SearchId || ' @' || CriteriaSequenceId);
        END IF;
    ELSE
        DBMS_OUTPUT.PUT_LINE ('Already exists ' || 'SearchId: ' || SearchId || ' @' || CriteriaSequenceId);
    END IF;
    RETURN C_Id;
END InsertSrchCriteria;

BEGIN
        SearchId = 5;
        CriteriaSequenceId := 1;
        SearchMethod := 'XPath';
        CritExpression := '//Expression/text()';
        SubstringStartPosition := null;
        SubstringLength := null;
        CritDescription := '';

        CriteriaId := InsertSrchCriteria  ****
        (
            CriteriaSequenceId,
            SearchId,
            SearchMethod,
            CritExpression,
            SubstringStartPosition,
            SubstringLength,
            CritDescription
        );
END;

Der Fehler tritt in der Zeile mit * *. Ich bin mir nicht ganz sicher, was diesen Fehler verursacht, kann mir jemand helfen?

9voto

Aaron Punkte 50780

Angesichts Ihrer FUNCTION-Definition:

FUNCTION InsertSrchCriteria
(
    SearchMethod IN VARCHAR2,
    CritExpression IN VARCHAR2,
    SubstringStartPosition IN NUMBER,
    SubstringLength IN NUMBER,
    CritDescription IN VARCHAR2,
    CriteriaSequenceId IN NUMBER,
    SearchId IN NUMBER
)

Und dann, wie Sie InsertSrchCriteria aufrufen:

    CriteriaId := InsertSrchCriteria  ****
    (
        CriteriaSequenceId,
        SearchId,
        SearchMethod,
        CritExpression,
        SubstringStartPosition,
        SubstringLength,
        CritDescription
    );

Ihr erster Parameter "CriteriaSequenceId" ist DECLAREd as:

CriteriaSequenceId NUMBER := 1;

Ihre Funktion erwartet also einen VARCHAR2 als ersten Parameter, aber Sie senden ihr eine Zahl. So wie es aussieht, sind Ihre Parameter einfach in der falschen Reihenfolge.

1voto

Khushbu Lil Punkte 11

Vergewissern Sie sich, daß bei der Pflege der SP-Parameterreihenfolge und der Funktion, die Sie für SP aufrufen, beide Parameterreihenfolgen übereinstimmen müssen.

zum Beispiel: Wenn der erste Parameter Ihrer SP @p_ID ist, muss der erste Parameter Ihres Funktionsaufrufs p_ID sein.

0voto

Strauteka Punkte 188

Verwenden Sie bitte diese Syntax,

 CriteriaId := InsertSrchCriteria
(
    SearchMethod =>test1,
    CritExpression =>test2,
    SubstringStartPosition =>null,
    SubstringLength =>test3,
    CritDescription =>...,
    CriteriaSequenceId =>...,
    SearchId =>..
);

Sie werden sicher wissen, wohin jede Variable geht und es ist einfacher, den Code später zu lesen ;) -

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X