存儲過程調用失敗
Ⅰ asp引用存儲過程失敗
調用存儲過程不可以直接寫sql語句的 我給你寫個我做過的例子吧 你自己照著改下或者 搜asp調用存儲過程
setcmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=connstr'資料庫連接字串
cmd.CommandText="dbo.P_viewPage_A"'存儲過程名
cmd.CommandType=4'使用的是存儲過程
cmd.CommandTimeout=0'超時
cmd.Prepared=true'將SQL命令先行編譯
cmd.Parameters.Appendcmd.CreateParameter("@TableName",200,1,200,datafrom)
cmd.Parameters.Appendcmd.CreateParameter("@FieldList",200,1,2000,FieldList)
cmd.Parameters.Appendcmd.CreateParameter("@PrimaryKey",200,1,100,"id")
cmd.Parameters.Appendcmd.CreateParameter("@Where",200,1,2000,datawhere)
cmd.Parameters.Appendcmd.CreateParameter("@Order",200,1,1000,taxis)
cmd.Parameters.Appendcmd.CreateParameter("@SortType",20,1,,3)
cmd.Parameters.Appendcmd.CreateParameter("@RecorderCount",20,1,,0)
cmd.Parameters.Appendcmd.CreateParameter("@PageSize",20,1,,pages)
cmd.Parameters.Appendcmd.CreateParameter("@PageIndex",20,1,,page)
cmd.Parameters.Appendcmd.CreateParameter("@TotalCount",20,2)
cmd.Parameters.Appendcmd.CreateParameter("@TotalPageCount",20,2)
setrs=cmd.Execute()'有返回記錄集並賦給rs
rs.close
Ⅱ SQL存儲過程調用時錯誤,請高手幫忙
很簡單的一個東西,你為什麼要用動態sql啊
ALTERPROCEDURE[dbo].[INSERT_TMPL0025_D60]
@sales_ordervarchar(100)
AS
insertintoTMPL0025_D60(
SALES_ORDER,
CUSTOMER_PTR,
CUST_PART_PTR,
INVENTORY_PTR,
COMM_ASSIGNED_BY_E_P,
QUOTE_PTR,
CUST_SHIP_ADDR_PTR,
NOTE_PAD_PTR,
CONF_BY_EMPL_PTR,
CSI_USER_PTR,
ENTERED_BY_EMPL_PTR,
MODIFIED_BY_EMPL_PTR,
PURCHASE_ORDER_PTR,
P_CODE,
[STATUS]
)
select
SALES_ORDER,
CUSTOMER_PTR,
CUST_PART_PTR,
INVENTORY_PTR,
COMM_ASSIGNED_BY_E_P,
QUOTE_PTR,
CUST_SHIP_ADDR_PTR,
NOTE_PAD_PTR,
CONF_BY_EMPL_PTR,
CSI_USER_PTR,
ENTERED_BY_EMPL_PTR,
MODIFIED_BY_EMPL_PTR,
PURCHASE_ORDER_PTR,
P_CODE,
[STATUS]
fromdata0060
wheresales_order=@sales_order
Ⅲ C#調用存儲過程參數問題以及參數值從Sqlparameter轉換到String失敗的原因。
還是數據調用的問題,就是數據類型不匹配,仔細看一下吧,中間有沒有數值轉換的操作.不一定就是出錯的位置的問題.設一個斷點,一步一步調,檢查每一步變數值的變化,仔細觀察每一步出現的提示和你預想是否一樣.
Ⅳ Oracle中存儲過程相互調用問題
使用包返回存儲過程結果集,例子:
create or replace package pkg_return_table
is
type c1 is ref
cursor;
procere p_return_table(v_c1 out c1); --定義存儲過程返回一個結果集
function f_return_table return pkg_return_table.c1; --定義函數返回一個結果集
procere
p_return_table1(v_id int,v_c1 out c1,v_c2 out c1);
--定義存儲過程返回多個結果集
end;
/
create or replace package body pkg_return_table
is
procere
p_return_table(v_c1 out c1)
is
begin
open v_c1 for select * from
student;
end p_return_table;
function f_return_table return
pkg_return_table.c1
is
v_c1 pkg_return_table.c1;
begin
open v_c1 for select * from student;
return v_c1;
end
f_return_table;
procere p_return_table1(v_id int,v_c1 out c1,v_c2 out
c1)
is
sqlstr varchar2(500);
begin
sqlstr:='select * from
student';
open v_c1 for sqlstr; --使用動態sql
sqlstr:='select * from
student where id=:w_id';
open v_c2 for sqlstr using v_id; --動態sql傳參
end p_return_table1;
end pkg_return_table;
/
--存儲過程調用
variable v_c1 REFCURSOR;
exec
pkg_return_table.p_return_table(:v_c1);
print v_c1;
--存儲過程調用
variable v_c1 REFCURSOR;
variable
v_c2 REFCURSOR;
exec
pkg_return_table.p_return_table1(1,:v_c1,:v_c2);
print v_c1;
print
v_c2;
--函數調用
select pkg_return_table.f_return_table()
from al;
重點是定義游標變數,獲取存儲過程結果集,然後Open游標,就跟平常的游標一樣的操作啦
不用包應該也可以的,定義REFCURSOR變數即可
Ⅳ db2 存儲過程 異常處理
存儲過程異常的處理:
DECLARE handler-type HANDLER FOR condition handler-action
異常處理器類型(handler-type)有以下幾種:
CONTINUE 在處理器操作完成之後,會繼續執行產生這個異常語句之後的下一條語句。
EXIT 在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
UNDO 在處理器操作執行之前,DB2會回滾存儲過程中執行的SQL操作。在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
異常處理器可以處理基於特定SQLSTATE值的定製異常,或者處理預定義異常的類。預定義的3種異常如下所示:
NOT FOUND 標識導致SQLCODE值為+100或者SQLSATE值為02000的異常。這個異常通常在SELECT沒有返回行的時候出現。
SQLEXCEPTIOIN 標識導致SQLCODE值為負的異常。
SQLWARNING 標識導致警告異常或者導致+100以外的SQLCODE正值的異常。
如果產生了NOT FOUND 或者SQLWARNING異常,並且沒有為這個異常定義異常處理器,那麼就會忽略這個異常,並且將控制流轉向下一個語句。如果產生了SQLEXCEPTION異常,並且沒有為這個異常定義異常處理器,那麼存儲過程就會失敗,並且會將控制流返回調用者。
以下示例聲明了兩個異常處理器。 EXIT處理器會在出現SQLEXCEPTION 或者SQLWARNING異常的時候被調用。EXIT處理器會在終止SQL程序之前,將名為stmt的變數設為"ABORTED",並且將控制流返回給調用者。UNDO處理器會將控制流返回給調用者之前,回滾存儲過程體中已經完成的SQL操作。
清單3:異常處理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果預定義異常集不能滿足需求,就可以為特定的SQLSTATE值聲明定製異常,然後再為這個定製異常聲明處理器。語法如下:
清單4:定製異常處理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
處理器可以由單獨的存儲過程語句定義,也可以使用由BEGIN…END塊界定的復合語句定義。注意在執行符合語句的時候,SQLSATE和SQLCODE的值會被改變,如果需要保留異常前的SQLSATE和SQLCODE,就需要在執行復合語句的第一個語句把SQLSATE和SQLCODE賦予本地變數或參數。
通常,會為存儲過程定義一個執行狀態的輸出參數(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --異常的聲明
--異常的處理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:產品實例關聯客戶過程出錯!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;
Ⅵ 存儲過程一直報錯 但是編譯成功了 也沒有錯 調用時一直不成功報錯
下面是問題:
Oraclede 環境中,客戶那邊提出,執行存儲過程時出錯,信息:DBCustomException: ORA-00900: invalid SQL statement
關於這個問題之前也遇到過,一直找不到原因,沒解決,時好時壞,,由於客戶大部分是SQL Server,也就沒太在意,現在終於麻煩來了。
我用自己創建的用戶,通過P/L SQL 登陸,執行以下語句
--創建表
create table ttt
(
aa varchar(20)
)
--創建存儲過程
CREATE OR REPLACE PROCEDURE myproc
AS BEGIN
select * from ttt;
END
--執行
exec myproc
執行存儲過程時,開始報錯:ORA-00900:無效SQL語句 (上面那個錯誤的中文版-_-!)
這時候看右邊的存儲過程如下,有個紅叉,
Ⅶ java 程序中開啟一個線程調用後台存儲過程,怎樣得知存儲過程執行完成了或者執行失敗
修改存儲過程,執行成功後返回一個指,然後程序判斷是不是返回指定的指。
Ⅷ 調用存儲過程失敗
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
Ⅸ pl/sql調用存儲過程不成功,求解決(oracle 10)
你的存儲過程就有問題吧。我的資料庫也是Oracle 10的,創建過程時報錯,select中沒有into子語。過程改好的話,調用是可以的。第一種的時候加括弧 CALL procere_test()