2011-12-16 40 views
3

我得到這個錯誤:獲取PL/SQL:數字或值錯誤:字符數轉換錯誤

ORA-06502:PL/SQL:數字或值錯誤:字符數轉換錯誤 ORA- 06512:在列146 06502. 00000 - 「PL/SQL:數字或值錯誤%的」

這裏是我的代碼:

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; 

的誤差與*行存在的* 。我不太確定是什麼導致了這個錯誤,有什麼幫助?

回答

6

鑑於你的函數定義:

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

再怎麼你打電話InsertSrchCriteria:

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

你的第一個參數 「CriteriaSequenceId」 聲明爲:

CriteriaSequenceId NUMBER := 1; 

所以你的函數需要VARCHAR2作爲第一個參數,但是你要發送一個數字。從外觀上看,你的參數只是錯誤的順序。

+0

也做到了,謝謝 – user906153 2011-12-16 18:45:30

0

請使用此語法,

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

你肯定知道每個變量去和 它更容易閱讀代碼後..;) -

相關問題