『壹』 新建存儲過程,將sql查詢語句變為存儲過程可以返回值
學習存儲過程的簡單方法; 就是在select的 前面加 create proc 存儲過程名 as select預計 end; 調用存儲過程的時候自然就是返回結果數據集了;不需要return返回值的;
『貳』 關於如何在mysql中創建存儲過程
創建存儲過程
CREATE PROCEDURE 存儲過程名()
一個例子說明:一個返回產品平均價格的存儲過程如下代碼:
CREATE PROCEDURE proctpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM procts;
END;
//創建存儲過程名為proctpricing,如果存儲過程需要接受參數,可以在()中列舉出來。即使沒有參數後面仍然要跟()。BEGIN和END語句用來限定存儲過程體,過程體本身是個簡單的SELECT語句
『叄』 sql存儲過程用遞歸
表結構:
sale_area銷售分區表
PK#area_id
class_id
gonghao
prod_class產品分類表
PK#class_id
class_name
問題sql語句:
select
distinct
pa.class_id
from
prod_class
As
pa,prod_class
As
pb,sale_area
where
pb.class_id
in(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
and
pa.class_id
like
pb.class_id||'%'
問題定義:
根據傳入的參數gonghao來確定對應的class_id集,然後遍歷這個class_id集,並「擴充」這個集合
要理解「擴充」必須知道class_id是這樣設等級:
0為最高級
|_01
|
|_011
|
|_012
|_02
|_011
|_012
那麼擁有等級0的話,所有的等級都應該可以訪問,擁有等級01的話,011、012也可以訪問。
這句sql的目的就是得到當前員工能訪問的所有產品分類及它的子集。
通過自連接的做法在Oracle里是對的,在DB2里就錯,原因在於DB2中謂詞like兩邊至少有一個是字元串,也就是說DB2不認為pb.class_id||'%'是字元串。
求解:
要完成上面的任務有什麼可替代的辦法或改進的地方,注意環境是DB2
UDB
7.2。
---------------------------------------------------------------
就是樹的問題。
使用公共表達式可以完成。
你在信息中心裏面按recusion去搜索,可以找到遞歸sql的寫法。
---------------------------------------------------------------
問題寫的很清楚,我喜歡!
如果要使用DB2的公共表達式建議你把
prod_class產品分類表結構改一下
PK#class_id
class_name
Parent_Class_id
sql語句如下:
with
temp_class_id(
class_id,class_name)
(
select
pc.class_id,pc.class_name
from
prod_class
pc
where
pc.class_id
in
(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
union
select
pc.class_id,pc.class_name
from
prod_class
pc,
temp_class_id
tc
where
pc.parent_id
=
tc.class_id)
select
*
from
temp_class_id;
『肆』 調用存儲過程(判斷出輸入參數是不是素數了的存儲過程 sp_sushu)輸出50-100之間素數的和
CREATE OR REPLACE PACKAGE BODY xxxx_test_pck IS
PROCEDURE get_sushu_prod(p_tag OUT NUMBER) IS
ln_num NUMBER;
ln_tag NUMBER := 0;
BEGIN
FOR i IN 50 .. 100 LOOP
SELECT MOD(i, 2) INTO ln_num FROM al;
IF ln_num = 1 THEN
ln_tag := ln_tag + i;
END IF;
END LOOP;
p_tag := ln_tag;
END;
END xxxx_test_pck;
『伍』 expdp怎麼導出存儲過程 函數 觸發器等
:Tools-Export Tables 不能導出存儲過程和觸發器,只能導出表的結構和該表的數據,存儲過程和觸發器的導出你可以用 Tools-Export User Objects
『陸』 發貨訂單實效性,用mysql如何實現
可以使用mysql的事件任務來實現
這需要你先編寫一個存儲過程,查詢3天內沒有狀態沒有變更為發貨狀態的數據,然後釋放庫存的邏輯
比如這個邏輯存儲過程叫 prod()
然後可以創建一個存儲過程,每天執行一次prod()
CREATEEVENTxxx
ONSCHEDULEEVERY1day
BEGIN
CALLprod()
END
這樣就創建了一個每天執行一次prod()存儲過程的事件任務了,xxx是事件任務的名字
『柒』 mysql 存儲過程
1. exec 存儲過程名
2. exec 存儲過程名 參數1,參數2,參數3......
或者exec 存儲過程名 參數1='',參數2='',參數3=''......
『捌』 存儲過程報錯:PLS-00103: 出現符號 "("在需要下列之一時:
問題屬於入參類型錯誤:
plsql中procere的入參類型,如果是number或varchar2的話不需要定義長度。否則編譯不能通過。
『玖』 多表存儲過程怎麼寫 表:order 欄位 id,prod_id 表:prod 欄位:id,total(每增加一個訂單,total就增加一
select * from t where 備注 like'%異常%' and id in (select top 10 id from t) order by 時間 desc
也就是先取前十條,然後在這十條中異常的,應該是可以的,我試過了