當前位置:首頁 » 存儲配置 » query調用存儲過程

query調用存儲過程

發布時間: 2022-12-31 15:19:36

⑴ delphi 中 使用ADOQuery 如何執行已有的存儲過程

建立proc
create proc MyABC @a int ,@b int, @c int output
as
set @c=@a*@b
sql中執行:
declare @a int,@b int,@c int
set @a=250
set @b=40
exec MyABC @a,@b,@c output --注意要添加output 關鍵字!
select @c
在D中:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(『execute MyABC :a,:b,:c output『);//也要添加output 關鍵字!
ADOQuery1.Parameters.ParamByName(『a『).Value:=250;
ADOQuery1.Parameters.ParamByName(『b『).Value:=40;
ADOQuery1.ExecSQL;
showmessage(ADOQuery1.Parameters.ParamByName(『c『).Value);

⑵ 使用query控制項怎麼調用存儲過程

過程如下:
public Boolean doInHibernate(Session session)
throws HibernateException, SQLException {
try{
Transaction tr = session.beginTransaction();
SQLQuery query = session.createSQLQuery("{call CommandAdapter(?,?,?,?)}");
query.setString(0,"ls");
query.setInteger(1, machineid);
query.setString(2, param);
query.setInteger(3, 0); //
query.executeUpdate();
tr.commit();
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}finally{

session.close();

}
}

使用hibernate調用帶參數返回值的存儲過程方法

在調用帶參數返回值的方法時,需使用到CallableStatement對象。因此,首先得設法獲取一個Connection。

獲取Connection 方法:

(1)session.connection();//此方法目前已被棄用

(2)SessionFactoryUtils.getDataSource(sessionFactory).getConnection()


過我在使用SessionFactoryUtils.getDataSource(sessionFactory)時,一直獲取的都是空值,為此參考
SessionFactoryUtils的源代碼直接利用ConnectionProvider對象來獲取一個Connection實例。

完整代碼:

SessionFactory sessionFactory=this.getSessionFactory();
if (sessionFactory instanceof SessionFactoryImplementor){
ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory).getConnectionProvider();
try {

CallableStatement statement = cp.getConnection().prepareCall(
"{call MachineDataQuery(?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
statement.setInt(1, machineId);
statement.setInt(2, jobId);
statement.setInt(3, partTypeId);
statement.setInt(4, compentId);
statement.setInt(5, opId);
statement.setInt(6, roleId);
statement.setInt(7, userId);
statement.setString(8, sd);
statement.setString(9, ed);
statement.registerOutParameter(10, Types.FLOAT);
statement.registerOutParameter(11, Types.FLOAT);
statement.registerOutParameter(12, Types.FLOAT);
statement.registerOutParameter(13, Types.FLOAT);
statement.registerOutParameter(14, Types.FLOAT);
statement.execute();
System.out.println(statement.getFloat(10));
System.out.println(statement.getFloat(11));
System.out.println(statement.getFloat(12));
System.out.println(statement.getFloat(13));
System.out.println(statement.getFloat(14));
} catch (SQLException e) {
e.printStackTrace();
}finally{
cp.close();
}
}

ps:切記存儲過程中不可有多餘的print或select語句,否則會拋出異常「com.microsoft.sqlserver.jdbc.SQLServerException: 已生成用於更新的結果集。」

⑶ hibernate調用存儲過程

hibernate3.0以上提供了兩種方式執行存儲過程。

第一種 :用JDBC 方式

Session session =HibernateSessionFactory.getSession(); //獲取hibernate會話

Connection conn = session.connection(); // 用session對象獲取連接

ResultSet rs =null;

try
{
CallableStatement call = conn.prepareCall("{Call pro_getManager(?,?)}");

call.setString(1, "admin");
call.setString(2, "admin");
rs = call.executeQuery();

}
catch (Exception e)
{
e.printStackTrace();
}finally
{

rs.close();//關閉
session.close();//關閉連接
HibernateSessionFactory.closeSession(); //關閉會話
}

這種方式本人感覺與hibernate結合不很緊密,還難以控制,還要自己控制關閉

第二種: 用hibernate中SQLQuery 介面執行,其實與執行sql沒有兩樣。

Session session =HibernateSessionFactory.getSession(); //獲取hibernate會話

String procName="{Call pro_getManager(?,?) }";

SQLQuery query = session.createSQLQuery(proc);
query.setString(0, "admin");
query.setString(1, "admin");
List list =query.list();

session.close();

HibernateSessionFactory.closeSession();

⑷ 關於delphi中用TQuery控制項調用存儲過程

如果用TQuery通過SQL語句執行存儲過程應該是
SQl
:=
'
exec
存儲過程名
參數1...參數n
'

⑸ Hibernate調用存儲過程,使用SQLQuery的方式,請問如果返回參數是CURSOR,怎麼寫呢

我使用的oracle
proc.registerOutParameter(2, OracleTypes.CURSOR);
不過第一個數好像是從1開始的吧

⑹ mysql 存儲過程怎麼調用

php調用mysql存儲過程和函數的方法
存儲過程和函數是MySql5.0剛剛引入的。關於這方面的操作在PHP裡面沒有直接的支持。但是由於Mysql PHP API的設計,使得我們可以在以前的PHP版本中的mysql php api中支持存儲過程和函數的調用。

在php中調用存儲過程和函數。

1。調用存儲過程的方法。

a。如果存儲過程有 IN/INOUT參數,聲明一個變數,輸入參數給存儲過程,該變數是一對,

一個php變數(也可以不必,只是沒有php變數時,沒有辦法進行動態輸入),一個Mysql

變數。

b。如果存儲過程有OUT變數,聲明一個Mysql變數。

mysql變數的聲明比較特殊,必須讓mysql伺服器知道此變數的存在,其實也就是執行一條mysql語句。

入set @mysqlvar=$phpvar ;

c。使用mysql_query()/mysql_db_query()執行mysql 變數聲明語句。

mysql_query("set @mysqlvar=$pbpvar");

這樣,在mysql伺服器裡面就有一個變數,@mysqlar。如果是IN參數,那麼其值可以由phpar傳入。

d。 如果是存儲過程。

1。執行 call procere()語句。

也就是mysql_query("call proceer([var1]...)");

2. 如果有返回值,執行select @ar,返回執行結果。

mysql_query("select @var)"

接下來的操作就和php執行一般的mysql語句一樣了。可以通過mydql_fetch_row()等函數獲得結果。

如果時函數。 直接執行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];

⑺ Delphi怎樣使用存儲過程參數

調用存儲過程最好使用Query組件,本人就是用Tstoredproc組件而屢屢出錯!這一段痛心疾首的錯誤老是涉及到ISAPI32.dll,讓我這個丈二和尚模不到屁股。使用Query控制項調用存儲過程如下:加入你的存儲過程有兩個參數:CREATE
PROCEDURE
Procere_Name
@proc1
int,@proc2
char(8)AS……則你的Query1控制項的代碼如下:With
Query1
doBegin
Close;
SQL.Clear;
SQL.Add('
Exec
Procere_Name
:proc1,:proc2
');
ParamByName('proc1').Value:=4;
ParamByName('proc2').Value:='Hello';
Try
ExecSQL;
Except
raise;
EndEnd

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:597
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:890
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:584
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:768
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:688
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1015
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:259
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:118
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:808
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:716