0
我收到以下Oracle錯誤:Oracle存儲過程PLS-00306:錯號碼或類型的參數
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'INSERT_CATEGORY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我讀了這個錯誤,有人說,如果你是傳遞一個不同的值類型的存儲過程類型可以使這個錯誤,但它似乎並不是我的情況。
我的大部分編碼的幾乎是相同的我有什麼(他們的工作)。與此不同的是我也使用了布爾值,所以我不確定是否也會導致問題。
Protected Sub BtnNew_Click(sender As Object, e As EventArgs) Handles BtnNew.Click
Dim conn As OleDbConnection = New OleDbConnection("Provider=""*******"";user id=" & strUserID & ";data source=" & strDatabase & ";password=" & strPssWd)
If Page.IsValid Then
If CatText.Text <> "" Then
Dim ClassifiedStr As New OleDbCommand
ClassifiedStr.CommandType = CommandType.StoredProcedure
'name of stored procedure = 'insert_category'
ClassifiedStr.CommandText = "insert_category"
ClassifiedStr.Connection = conn
'Must be organized based on Stored Procedure
ClassifiedStr.Parameters.Add("val_category", OleDbType.VarChar, 40).Value = CatText.Text
conn.Open()
'Makes sure the Category doesn't already exist****************
Dim myParm As OleDbParameter = ClassifiedStr.Parameters.Add("val_newcat", OleDbType.Boolean)
myParm.Direction = ParameterDirection.Output
ClassifiedStr.ExecuteNonQuery()
'myParm needs Execute
Dim standardid As Integer = myParm.Value
'***********************************************
If standardid = False Then
conn.Close()
Response.Write("<script language=""javascript"">alert('Thanks! Record Has Been Added.');</script>")
Response.Redirect("DisplayCategories.aspx")
Else
Response.Write("<script language=""javascript"">alert('Sorry! Record Already Exist.');</script>")
Exit Sub
End If
Else
Response.Write("<script language=""javascript"">alert('You must insert a record.');</script>")
Exit Sub
End If
End If
End Sub
存儲過程
CREATE OR REPLACE PROCEDURE insert_category
(val_category TABLENAME.Category%type,
val_newcat out boolean)
as num_catid number;
begin
select category_seq.nextval into num_catid from dual;
INSERT INTO TABLENAME
(select num_catid, val_category from TABLENAME WHERE Category != val_Category);
commit;
val_newcat := SQL%FOUND;
end;
更改您的存儲過程使用合併,這樣的SP可以確定它是否應該插入或更新。這也將清理你的VB。 – Chuck
將您的'TABLENAME.Category%type'更改爲'varchar2'。請記住,你使用OleDb,這是不理想的。切換到Oracle的ODP.net。 –
我從來沒有做過一個合併之前,但我已經完成像上面的存儲過程,他們工作得很好。 (所以我不認爲我必須使用合併)也@ T.S。我的其他存儲過程使用%類型沒有問題。只是由於某種原因,我有這個問題 – narue1992