當前位置:首頁 » 數據倉庫 » c資料庫存儲過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c資料庫存儲過程

發布時間: 2022-07-06 03:42:17

㈠ 什麼叫做「用C#寫存儲過程」存儲過程不是在資料庫中的

就是在VS2005或2008里用C#生成的存儲過程語句,和資料庫里操作一樣的

㈡ 什麼是資料庫存儲過程

存儲過程(Stored Procere)是在大型資料庫系統中,一組為了完成特定功能的sql 語句集,它存儲在資料庫中,一次編譯後永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升。

這類語言主要提供以下功能,讓用戶可以設計出符合應用需求的程序:

1、變數說明

2、ANSI(美國國家標准化組織)兼容的SQL命令(如Select,Update….)

3、一般流程式控制制命令(if…else…、while….)

4、內部函數

(2)c資料庫存儲過程擴展閱讀:

種類

1、系統存儲過程

2、本地存儲過程

3、臨時存儲過程

4、遠程存儲過程

5、擴展存儲過程

㈢ 如何通過c或c++調用存儲過程

給個例子給你看下:
...

_CommandPtr m_cmdptr;
m_cmdptr.CreateInstance(__uuidof( Command ) );

_ParameterPtr inParam2=NULL;
_ParameterPtr inParam3=NULL;
_ParameterPtr inParam4=NULL;
_ParameterPtr outParam1=NULL;
_ParameterPtr outParam2=NULL;
_ParameterPtr outParam3=NULL;

inParam2.CreateInstance(__uuidof(Parameter));
inParam3.CreateInstance(__uuidof(Parameter));
inParam4.CreateInstance(__uuidof(Parameter));
outParam1.CreateInstance(__uuidof(Parameter));
outParam2.CreateInstance(__uuidof(Parameter));
outParam3.CreateInstance(__uuidof(Parameter));

m_cmdptr->ActiveConnection=m_pConnection;
m_cmdptr->CommandType=adCmdStoredProc;
m_cmdptr->CommandText=_bstr_t("proc_XXX");//存儲過程的名稱

//輸入參數
inParam2=m_cmdptr->CreateParameter(_bstr_t("@P1"),adVarChar,adParamInput,32,_bstr_t(P1));
m_cmdptr->Parameters->Append(inParam2);

inParam3=m_cmdptr->CreateParameter(_bstr_t("@P2"),adVarChar,adParamInput,20,_bstr_t(P2));
m_cmdptr->Parameters->Append(inParam3);

//輸出參數
outParam1=m_cmdptr->CreateParameter("@P4",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam1);
outParam2=m_cmdptr->CreateParameter("@P5",adInteger,adParamOutput,sizeof(int));
m_cmdptr->Parameters->Append(outParam2);
outParam3=m_cmdptr->CreateParameter(_bstr_t("@P6"),adVarChar,adParamOutput,20,_bstr_t(P6));
m_cmdptr->Parameters->Append(outParam3);

//執行

m_cmdptr->Execute(NULL,NULL,adCmdStoredProc);

//取返回值

long p1=m_cmdptr->Parameters->GetItem("@P4")->Value;
long p2=m_cmdptr->Parameters->GetItem("@P5")->Value;

VARIANT vtP6 =m_cmdptr->Parameters->GetItem("@P6")->Value;
if (vtP6.vt != VT_NULL)
strcpy(tp,(_bstr_t)vtP6);

m_cmdptr.Detach;

㈣ 在資料庫查詢分析器中如何創建一個存儲過程

顧客訂閱信息表為:userborrow
顧客編號:userid 顧客名:username 訂閱報紙名:newspaper 訂閱份數:papertotal
創建存儲過程:
CREATE PROCEDURE C_P_Proc
@username nvarchar(50)
AS
select userid,username,newspaper,papertotal from userborrow where username=@username
GO
調用存儲過程:
EXECUTE C_P_Proc 'JIM'

㈤ 資料庫中存儲過程到底有什麼意義

創建了是拿來用的,至於為什麼要用存儲過程,要先了解存儲過程存在的意義:

存儲過程由SQL語句和流程式控制制語句組成。它的功能包括:接受參數;調用另一過程;返回一個狀態值給調用過程或批處理,指示調用成功或失敗;返回若干個參數值給調用過程或批處理,為調用者提供動態結果;在遠程SQL Server中運行等。

1)·存儲過程是預編譯過的,所以存儲過程執行速度很快.

2)·存儲過程和待處理的數據都放在同一台運行SQL Server的計算機上,使用存儲過程查詢當地的數據,效率自然很高

3)·存儲過程一般多由Client端通過存儲過程的名字進行調用,減少了網路傳輸量,加塊系統速度.

4)·存儲過程還有著如同C語言子函數那樣的被調用和返回值的方便特性。

㈥ 跪求資料庫存儲過程詳解!!

首先你要懂的sql語句,如果不懂,請先把這個學好再來學存儲過程。
大部分存儲過程的主要結構:
參數:即sql語句的條件,如select * from text where id=@id. @id就是參數。你在調用這個存儲過程時就要傳過來的數據。
復雜的存儲過程結構:
觸發器,游標.....這些就比較復雜點,通常是用來處理復雜的數據時使用。
觸發器:簡單點說就是一組存儲過程一起執行。對了就過去,錯了就返回。
其它的就要看你要怎麼調用了,好好學吧

㈦ 資料庫的存儲過程是怎麼做的

create or replace PROCEDURE test_owen -定義名稱
(in_bakk_id in number, -定義輸入值
on_code out number) -定義輸出值
is

--v_bakk varchar(8);

begin -開始實施

insert into an_bakk_mid select * from an_bakk where bakk_id = in_bakk_id; --操作語句提取數據到中間表

end test_owen; -結束

查詢錯誤-show error;
創建存儲過程-create procere 名稱 is
begin
--執行
end;
如果過程名存在
覆蓋,替換創建存儲過程
-create or replace procere 名稱 is
begin
--執行
end;
調用存儲過程-exec 過程名(參數1,參數2);
調用存儲過程-call 過程名(參數1,參數2);

調用系統包輸出一句話-begin
dbms_output.put_line('ni hao !');
end;

-----------------
set serveroutput on 輸入選項開關
-----------------
提示輸入一個值來查詢;
declare
--定義變數
v_ename varchar2(5);
begin
--執行部分
select ename into v_ename from emp where empno=&aa;
--在控制台顯示
dbms_output.put_line('用戶名是:'||v_ename);
--異常處理
exception
when no_data_found then
dbms_output.put_line('您輸入的編號輸入有錯誤,請重新輸入!');
end;
-----------------------
更改一個人的工資
create procere new_sy(newname varchar2,newsal number) is
begin
update emp set sal=newsal where ename=newname;
end;
----------------------------------------------------------
輸入一個編號查詢個人所得稅
--------------------------
declare
c_tax_rate number(3,2):=0.03;
v_ename varchar2(10); ---v_ename emp.ename&tpye;
v_sal number(7,2);
v_tex_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tex_sal:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工資是:'||v_sal||' 個稅是:'||v_tex_sal);
end;

------------------------------
找出工資小於2000的人給其加薪百分之20;
create or replace procere SP_syadd (add_name varchar2) is
add_sal emp.sal%type;
begin
select sal into add_sal from emp where ename=add_name;
if add_sal<2000 then
update emp set sal=sal*1.2 where ename=add_name;
end if;
end;

-------------------------------
--輸入一個雇員編號,如果該雇員的職位是PRESIDENT 就給他加1000
--如果職位是MANAGER給他加500,其他職位加200;
create or replace procere SP_syadd (add_name varchar2) is
add_job emp.job%type;
begin
select job into add_job from emp where empno=add_name;
if add_job='PRESIDENT' then
update emp set sal=sal+1000 where empno=add_name;
elsif add_job='MANAGER'then
update emp set sal=sal+500 where empno=add_name;
else
update emp set sal=sal+200 where empno=add_name;
end if;
end;
---------------------------------

可變的標量--
v_ename emp.ename&tpye;

㈧ 關於資料庫中定時存儲的存儲過程!!!!!!!!!

你是問存儲過程怎麼寫還是問怎麼實現定時調用呢?
定時調用有以下三種方法:
1、DB2中的任務中心,我用過,功能能實現,但是不太穩定;
2、使用操作系統的定時任務,如Windows的計劃任務,或Unix、AIX中的crontab
3、自己設計程序做定時任務。
存儲過程用一個簡單的判斷和insert語句就能搞定,每小時執行一次,如果是(年初、年末或自己定義的時間執行ab欄位的insert)

㈨ 什麼是存儲過程

定義:
將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
講到這里,可能有人要問:這么說存儲過程就是一堆SQL語句而已啊?
Microsoft公司為什麼還要添加這個技術呢?
那麼存儲過程與一般的SQL語句有什麼區別呢?
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
存儲過程的種類:
1.系統存儲過程:以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作,
如 sp_help就是取得指定對象的相關信息
2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能
exec master..xp_cmdshell 'ping 10.8.16.1'
3.用戶自定義的存儲過程,這是我們所指的存儲過程
常用格式
Create procere procee_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解釋:
output:表示此參數是可傳回的
with {recompile|encryption}
recompile:表示每次執行此存儲過程時都重新編譯一次
encryption:所創建的存儲過程的內容會被加密
如:
表book的內容如下
編號 書名 價格
001 C語言入門 $30
002 PowerBuilder報表開發 $52
實例1:查詢表Book的內容的存儲過程
create proc query_book
as
select * from book
go
exec query_book
實例2:加入一筆記錄到表book,並查詢此表中所有書籍的總金額
Create proc insert_book
@param1 char(10),@param2 varchar(20),@param3 money,@param4 money output
with encryption ---------加密
as
insert book(編號,書名,價格) Values(@param1,@param2,@param3)
select @param4=sum(價格) from book
go
執行例子:
declare @total_price money
exec insert_book '003','Delphi 控制項開發指南',$100,@total_price
print '總金額為'+convert(varchar,@total_price)
go
存儲過程的3種傳回值:
1.以Return傳回整數
2.以output格式傳回參數
3.Recordset
傳回值的區別:
output和return都可在批次程式中用變數接收,而recordset則傳回到執行批次的客戶端中
實例3:設有兩個表為Proct,Order,其表內容如下:
Proct
產品編號 產品名稱 客戶訂數
001 鋼筆 30
002 毛筆 50
003 鉛筆 100
Order
產品編號 客戶名 客戶訂金
001 南山區 $30
002 羅湖區 $50
003 寶安區 $4
請實現按編號為連接條件,將兩個表連接成一個臨時表,該表只含編號.產品名.客戶名.訂金.總金額,
總金額=訂金*訂數,臨時表放在存儲過程中
代碼如下:
Create proc temp_sale
as
select a.產品編號,a.產品名稱,b.客戶名,b.客戶訂金,a.客戶訂數* b.客戶訂金 as總金額
into #temptable from Proct a inner join Order b on a.產品編號=b.產品編號
if @@error=0
print 'Good'
else
&n bsp; print 'Fail'
go

存儲過程介紹
一、先介紹一下什麼是存儲過程
存儲過程是利用SQL Server所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的Pro-SQL和Informix的資料庫系統能夠中的Informix-4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數

二、存儲過程的書寫格

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這兩個語句。

例子:
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id

例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序

三、在SQL Server中執行存儲過程

在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt

以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果

sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。

存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化 後存儲在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯系的過程可以組合在一起構成程序包。
使用存儲過程有以下的優點:
* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可 以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。
* 可保證數據的安全性和完整性。
# 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。
# 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執 行。
* 可以降低網路的通信量。
* 使體現企業規則的運算程序放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改 任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運 算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序 工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可 以了,應用程序無須任何變化。

㈩ 什麼是資料庫的存儲過程啊請用通俗易懂的話告訴我。謝謝!

是這樣,存儲過程是一些事先寫好的語句,保存在資料庫中,通常與資料庫一起安裝在資料庫伺服器上,可接受來自PC工作站的調用請求。

存儲過程之所以有價值,是因為它保存在伺服器上,當你在PC機上發出查詢指令時,那隻是一個簡單的指令名稱,具體的查詢和解釋利用伺服器的強大能力完成,最後僅反饋結果給PC,這樣就充分利用了伺服器的計算資源,還節省了網路帶寬。

當然,存儲過程也有缺點,其中一個就是移植困難,你在SQL中寫的要移植為Oracle的,就只好重寫,雖然理論上可「翻譯」,但SQL和Oracle機制不同,要想發揮各自的深層性能,只能用各自的「個性化」語法,所以其實移植代價很高,不如重寫。
再有就是反編譯比較簡單,安全性較差。
相信隨著三層架構的崛起,業務邏輯開始向中間層轉移,而不是象過去那樣集中在資料庫伺服器上,C/S模式下大行其道的存儲過程會慢慢走向沒落的。