mysql存儲過程調用視圖
1、首先先創建一個存儲過程,代碼如圖,存儲過程主要的功能是為表JingYan插入新的數據。
B. mysql如何創建存儲過程
1 用mysql客戶端登入
2 選擇資料庫
mysql>use test
3 查詢當前資料庫有哪些存儲過程
mysql>show procere status where Db='test'
4 創建一個簡單的存儲過程
mysql>create procere hi() select 'hello';
5 存儲過程創建完畢,看怎麼調用它
mysql>call hi();
顯示結果 mysql> call hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
6 一個簡單的儲存過程就成功了
C. 求助java調用MYSQL存儲過程的問題
1.資料庫存儲過程:簡單滴說,存儲過程就是存儲在資料庫中的一個程序。
2..資料庫存儲過程作用:
第一:存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快
第二:存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因。
第三:存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。
第四:存儲過程主要是在伺服器上運行,減少對客戶機的壓力。
第五:存儲過程可以包含程序流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
第六:存儲過程可以在單個存儲過程中執行一系列 SQL 語句。
第七:存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
此外,如果多條SQL語句執行過程中,過程環節返回了數據作為後面環節的輸入數據,如果直接通過
SQL語句執行,勢必導致大量的數據通過網路返回到客戶機,並在客戶機運算;如果封裝在存儲過程中,
則將運算放在伺服器進行,不但減少了客戶機的壓力,同時也減少了網路流量,提高了執行的效率。
3.mysql存儲過程:
MySQL5存儲過程,用得人好像不多。按照資料庫設計原理來講,存儲過程是在db server上預編譯的,所以查詢速度會比較起純SQL語句快很多。可能是現在流行OO,導至存儲過程使用的餘地大打折扣。但如果從效果上來講,用存儲過程來實現業務規則所帶得DB SERVER壓力,比用JAVA類實現業務規則所帶來的WEB SERVER壓力要小。當然存儲過程也不應濫用,象普通的insert、update之類的語句就不需要使用存儲過程了。
MySQL創建procure的語法與sql server/Oracle差別較大。
例1:傳入參數的procere
create procere usp_test(param varchar(20)
select * from talbeName where column=param
例2:更新表的procere
create procere usp_test2 (t varchar(20))
begin
set xname = 'test';
update table set column = xname where column1=t;
end
MySQL創建存儲過程時不帶as,而且()不能省略,即便是沒有傳入參數。這一點象sql server或是oracle那樣直觀,而且聲明變數時直接用declare,不用加的@或@@(in out變數除外)。還有一點是很怪的語法,如果是以「select」為開頭的存儲過程,是不能加"begin end"的。"begin end"表示多條SQL語句的復合體。
當然,事實上幾乎沒有哪款資料庫是完全符合SQL3標準的,多少都含有自己的一些成份裡面,這也造成使用存儲過程會使程序的可移性降低。
調用procere
MySQL使用call關鍵字。例:call usp_test('test');而不是execute,同樣()是不能省略的。
創建完procere後,再看看java是如何調用procere的。
Connection conn = null;
CallableStatementcstmt=null;
ResultSetrs=null;
try{
conn=DbConn.getDbConn();//getpoolconn
CallableStatementcstmt=conn.prepareCall("{callusp_test(?)}");
call.setString(1,"test");
rs=call.executeQuery();
while(rs.next()){
Stringte=rs.getString(1);
System.out.println("te:"+te);
}
}catch(Exceptione){
System.out.println("e:"+e);
}finally{
try{
rs.close();
cstmt.close();
conn.close();
}catch(Exceptionex){
System.out.println("ex:"+ex);
}
}
這里使用的是"{call usp_test()}"來調用存儲過程。同時也可以編程傳入參數,進行查詢。
D. mysql 存儲過程 執行報錯 我創建了一個簡單的存儲過程,成功了,但是在call執行調用的時候怎麼老是報錯呢
create procere proprice() is
begin
select avg(price) as average from procts;
end;
以上就是規范的格式,請不要添加額外的東西,執行之後調用即可。
如果有其他問題,你可以先網路一下存儲過程的規范應用
E. sql 調用已經建立的存儲過程
實現的方法和詳細的操作步驟如下:
1、第一步,創建一個存儲過程,該代碼如圖所示。存儲過程的主要目的是為表「JingYan」插入新數據,如下圖所示,然後進入下一步。
F. 如何查詢SqlServer和MySql資料庫中某個資料庫下面所有的視圖信息和存儲過程的信息,在java中操作
視圖
SQL Server
select
a.name AS ViewName,
c.text AS CreateViewSQL
from
sys.views a
LEFT OUTER JOIN
dbo.syscomments c ON a.object_id = c.id
order by
a.name
MySQL
是否是視圖 通過 table_type 欄位是否為 VIEW 來區分的。
SELECT
table_name AS `視圖名`,
table_type AS `類型`,
engine AS `引擎`,
table_comment AS `備注`
FROM
information_schema.tables
WHERE
table_schema = 'test' AND table_type = 'VIEW'
ORDER BY
table_name DESC;
存儲過程
SQL Server
select
pro.name AS ProcereName,
c.text AS CreateProcereSQL
from
sys.proceres pro LEFT OUTER JOIN
dbo.syscomments c ON pro.object_id = c.id
MySQL 裡面,查存儲過程的,我這里暫時沒有。
G. MySQL存儲過程里怎麼定義一個參數類型和表的變數類型一樣
MySQL存儲過程中,定義變數有兩種方式:
1、使用set或select直接賦值,變數名以@開頭,可以在一個會話(即連接)的任何地方聲明,作用域是整個會話,稱為用戶變數。例如:set @var=1;
2、 以declare關鍵字聲明的變數,只能在存儲過程中使用,稱為存儲過程變數,主要用在存儲過程中,或者是給存儲傳參數中。例如: declare var1 int default 0;
兩者的區別是:
在調用存儲過程時,以declare聲明的變數都會被初始化為null。而會話變數(即@開頭的變數)則不會被再初始化,在一個會話(連接)內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全局變數。