⑴ 編寫一個存儲過程,急急
不需要存儲過程
一個sql就行
select 起運港 ,目的地, 船名, 航次 , sum(case when 箱類 = 'GP' then 1 else 0 end ) as GP,
sum(case when 箱類 = 'HQ' then 1 else 0 end ) as HQ,
SUM(case when 箱類 = 'FR' then 1 else 0 end ) as FR,
SUM(case when 箱類 = 'TK' then 1 else 0 end ) as TK
from tcard
⑵ 如何編寫資料庫存儲過程
存儲過程代碼參考如下:
create
or
replace
procere
bak_pay_list_xxx(local_net
in
varchar2,bak_month
in
varchar2,ret
out
varchar2)
is
ls_sql
varchar2(1024);
ls_sql_del
varchar2(1024);
begin
...
end
bak_pay_list_xxx;
⑶ 存儲過程的編寫
我是這樣理解的:
1、要求根據UserId,查T_Mail_User表,得到MailId,再查T_Mail表獲得郵件。
2、同時可以獲得用戶的收藏郵件。即不但提供UserId輸入,而且提供「是否要取收藏記錄」的輸入參數。
3、同時支持條件查詢,比如,按發送日期等查詢,默認1=1,即沒有條件語句。
這樣,存儲過程中關鍵的語句為
if(@filterString is null)
set @filterString='1=1'
declare cmdStr char(256)
if(isGetFavorite)
set cmdStr='select b.* from T_Mail_User a,T_Mail b
where a.isFavorite=1 and a.UserId=@userId and a.MailId=b.MailId and a.MailType=0 and '+@filterString
else
...a.isFavorite=0...
exec(cmdStr)
上面假設收件箱標識為0,如果參數化,此存儲過程也可用於查用戶的發件箱等。
上面的@filterString就是條件字元串,或者『1=1』可能由前台提供,此時不必要第一個if。
⑷ 存儲過程怎麼寫簡單
可以的
CREATE procere InSertUser
@Username varchar(50),
@UserPwd varchar(50),
@UserDate datetime=getdate,
@Action varchar(50)
as
if(@Action='Create')
BEGIN
INSERT INTO Users
(UserName, UserPwd, UserDate)
VALUES
(
@Username,
@UserPwd,
@UserDate
)
END
else if(@Action='Update')
BEGIN
update xxx set aaa=''
END
GO
通過傳遞@Action的不同值就可以了 這只是個思路 具體實現你可以自己考慮考慮
⑸ 寫一個存儲過程。
我覺得你的業務口徑沒有描述清楚,但是我連猜帶蒙的寫了一下,你看看符合你的需求否
CREATE OR REPLACE PROCEDURE p_ccrm
(v_depid ccrm_deptment.depid%type)
AS
v_shouliliang number(100);
v_wangchengliang number(100);
v_chaoshiliang number(100);
BEGIN
IF(V_DEPID=0)
THEN
select count(distinct id) shouliliang
,sum(case when workstate='已處理' or workstate='辦結' then 1 else 0 end) wanchengliang
,sum(case when workendtime-workstart > XX then 1 else 0 end) chaoshiliang
into v_shouliliang,v_wanchengliang,v_chaoshiliang
from ccrm_service cs,ccrm_userlist cu,ccrm_deptment cd
where cd.depid=cs.depid
and cd.depid=cu.depid
group by deptid;
else
select count(distinct id) shouliliang
,sum(case when workstate='已處理' or workstate='辦結' then 1 else 0 end) wanchengliang
,sum(case when workendtime-workstart > XX then 1 else 0 end) chaoshiliang
into v_shouliliang,v_wanchengliang,v_chaoshiliang
from ccrm_service cs,ccrm_userlist cu,ccrm_deptment cd
where cd.depid=cs.depid
and cd.depid=cu.depid
and cd.depid=v_depid
group by id;
end if;
DBMS_OUTPUT.PUT_LINE("受理量:"||v_shouliliang||「;完成量:
」||v_wanchengliang||";超時量:"||v_chaoshiliang);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Not FOUND RECORD');
END;
⑹ 怎麼寫存儲過程
一、整體格式。存儲過程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,... */ )
/* RESULT ( column-name,... ) */
BEGIN
;
END
其中creator是用戶名,比如dba;proc_name是你自己起的過程名;後面的參數可有可無,視自己情況定,如果有格式如(a integer,b char(50));再下面的RESULT應該是返回值,這個沒用過不知道怎麼回事!
二、內容。把這些都寫好了可能是這樣:
CREATE PROCEDURE dba.myProcere ( @a integer,@b char(50))
BEGIN
;
END
但是這樣子還是不能編譯的,因為整個過程體是空的,而我學習的結果是過程中至少要有一個SQL語句。所以要這樣寫才不會出錯:
CREATE PROCEDURE dba.myProcere ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、語法。
1、分號。在寫的過程中最郁悶的問題是分號!最後發現好像是這樣:
每一句都要加分號,不管是SQl語句還是其它的什麼語句,但是最後保存後最後一句的分號會被自動刪除!(我用的是Sybase的Sybase Central)。
2、定義變數。
格式為Declare @varName integer;(注意有分號!)「@」號好像可有可無!
3、SELECT語句。
格式為:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if語句。
格式為:
if(varName > 0) then
return
end if;(注意還有分號!)
5、循環語句。
格式為:
loop
……
end loop;(注意分號!)
6、設置變數值。
格式為:
set @varName = 10;
set @varName = @varName2;
7、字元串。
Declare myString char(50);
set @myString = 'Hello!';
要用單引號!
8、定義游標。
格式為:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打開、使用和關閉游標。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、調用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是調用程序中自定義的過程名,ProcName2是資料庫中存儲過程的名字,下面的傳入的參數。
⑺ 存儲過程怎麼寫啊
//創建存儲過程
CREATE PROCEDURE userData(
IN id INT
)
BEGIN
SELECT * from userdata WHERE userflag = id;
END;
其中IN是傳進去的變數;
drop procere userData;//銷毀這個存儲過程。
call userData(2) //調用存儲過程。
(7)編寫存儲過程擴展閱讀:
sql中的存儲過程及相關介紹:
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名數據類型[VARYING] [=內定值] [OUTPUT]。
每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
[內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數。
同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。
參考資料來源:網路-儲存過程
⑻ sql怎樣新建存儲過程
一:創建沒有參數的存儲過程:
CREATE PROCEDURE select_all
AS
BEGIN
SELECT * from T_login1
GO
二:創建帶參數的存儲過程:
CREATE PROCEDURE select_name
@id uniqueidentifier
AS
BEGIN
SELECT * from T_login1 where PSN0001A=@id
GO
(8)編寫存儲過程擴展閱讀:
創建存儲過程的注意事項:
1、保持事務簡短,事務越短,越不可能造成阻塞。
2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。
3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。
4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。
⑼ 編寫存儲過程
1 select PersonName from tb_職員 z
left join tb_考勤 k on z.PersonID=k.PersonID
where (k.Cio=i and k.Ctime>N'0830') or (k.Cio=O and k.Ctime<N'1730')
2 select count(*) as num,PersonName,z.PersonID from tb_職員 z
left join tb_考勤 k on z.PersonID=k.PersonID
where (k.Cio=i and k.Ctime>N'0830') or (k.Cio=O and k.Ctime<N'1730') and num>=10
group by z.PersonID