當前位置:首頁 » 服務存儲 » 存儲過程中的書名號
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程中的書名號

發布時間: 2022-09-07 13:10:19

1. 請問這個存儲過程怎麼寫創建圖書查詢存儲過程要求:前台查詢圖書時,可能根據不同的信息查詢,如書名、i

sql">createprocdbo.Usp_GetBookInfoList
(
@booknameasvarchar(100)='',
@isbnasvarchar(20)='',
@authorasvarchar(100)='',
@publisherasvarchar(100)=''
)
as
begin
select*fromt_book
where
booknamelike'%'+@bookname+'%'
andisbnlike'%'+@isbn+'%'
andauthorlike'%'+@author+'%'
andpublisherlike'%'+@publisher+'%'
end

2. 這是一個存儲過程的實際應用,程序如下:

create proc proc_management --存儲過程創建語句 過程名:proc_management

@bookid varchar(50),@op int=0 --生命參數 @bookid 字元型,50位元組 @op整型

as --存儲過程關鍵字,以下是執行體

if @op=0 --如果參數 @op=0 執行以下 BEGIN ...END 之間的代碼

begin

select 圖書明細.書號,圖書明細.書名,類別信息.類別,圖書明細.零售價,圖書信息.ISBN

from 圖書明細

inner join 類別信息 on 圖書明細.類別 = 類別信息.類別編號 --表圖書明細 與表 類別信息 以 欄位 類別(類別編號關聯)進行 內鏈接

inner join 圖書信息 on 圖書明細.書號 = 圖書信息.書號 --表圖書明細 與 表 圖書信息 以欄位 出版社編號關聯 進行內連接

inner join 出版社信息 on 圖書信息.出版社編號 = 出版社信息.編號 -- 表 圖書明細 與表 出版社信息 以欄位 出版社編號 關聯,進行內鏈接

where 圖書明細.書號=@bookid ---查詢條件 書號=參數 @bookiD

end

3. 存儲過程和觸發器

PROCEDURE
p_book1
PROCEDURE p_book2
書名='大學英語'
EXEC p_book2
圖書編號=@x
'001105'
varchar(20)
書籍表 where 書名=@c1
EXEC p_book4 '大學語文'

4. 如何創建存儲過程

oracle or sqlserver???
給你個oracle的,sqlserver的已經有人回復了。
CREATE OR REPLACE PROCEDURE pro_sb --創建過程名
( v_name) --參數「姓名」
as
v_card varchar2(20);--定義變數借書證號
v_bookcard varchar2(20); --變數:書號
v_bookname varchar2(20); --變數:書名
v_begindate DateTime; --借書時間
v_enddate DateTime; --還書時間
begin
select '借書證號' into v_card from card where '姓名'=v_name; --從card表中查出借書證號
select '書號','借書時間','還書時間' into v_bookcard,v_begindate,v_enddate from borrow where '書號'=v_card;
--從borrow表中根據借書證號查詢書號\借書時間、還書時間
select '書名' into v_bookname from book where '書號' =v_card;--根據書號查書名
select v_card ,v_bookname,v_begindate,v_enddate from al;--返回值,返回借書證號,書名,借書時間,還書時間
end;

5. 【SQL server】請教各位大神這兩個題怎麼做啊

(1)查詢課程信息。
select 課程號,課程名 from 課程表;
(2)查詢學生學號、姓名、課程號、分數。
selet 學號,姓名,課程號,分數 from 學生基本信息表 a ,選課成績表 b wgere a.學號=b.學號;
(3)按課程號分別統計學生平均成績。
selet AVG(分數), 課程號 課程表 GROUP BY 課程號;
(4)創建視圖,查詢學生基本信息,內容按照學號降序排序。
create VIEW 視圖 as
select * from 學生基本信息表 order by 學號 desc;
(5)創建存儲過程查看所有學生的學號、課程號、成績(不帶參數),執行該存儲過程,查看結果。
CREATE
PROCEDURE `tstdb`.`eeeee`()
BEGIN
select 學號,課程號,成績
from 學生基本信息表 a,選課成績表 b,課程表 c
where a.學號=b.學號
and b.課程號=c.課程號
END;
(6)創建一個UPDATE觸發器,當修改「選課成績表」中的成績時,彈出「勿修改成績……」等信息。
emmmmmm 觸發器這個真不熟悉;怎麼能列印出來

6. T-SQL存儲過程是什麼

就是在資料庫裡面
預先寫好了的
用來操作資料庫的語句
一般都需要程序提供
存儲過程中的
變數
來現實操作
例子:
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
要用的時候,程序就調用記錄著上這些語句的存儲過程的名字
並把
param1~4
的值也在調用的時候
寫出來
這樣就不用打那麼多的語句,而且對於速度也有一定的幫助

7. 存儲過程的結構是什麼樣的

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這一參數輸出給調用這一存儲過程的程序。

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

8. 做一存儲過程,要求找出已借書但還沒有還書的人員記錄、借書時間、借書書名。

Create procere 借書記錄_procl
As select 借書人名字,借書時間,書名
From 借書記錄 a left join 還書記錄 b
Where 借書人ID=還書人ID and 借書ID=還書ID and
( 借書標志 is not null ) and (還書標志 is null)
go

9. 存儲過程的觸發器

觸發器是一種特殊類型的存儲過程,它不同於我們前面介紹過的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如Update、 Insert、 Delete 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對數據的處理必須符合由這些SQL 語句所定義的規則。
觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能:
(1) 強化約束(Enforce restriction)
觸發器能夠實現比CHECK 語句更為復雜的約束。
(2) 跟蹤變化Auditing changes
觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。
(3) 級聯運行(Cascaded operation)。
觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
(4) 存儲過程的調用(Stored procere invocation)。
為了響應資料庫更新,觸發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS(資料庫管理系統)本身之外進行操作。
由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外一個表的同一類型(Insert、 Update、 Delete)的多個觸發器能夠對同一種數據操作採取多種不同的處理。
總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在資料庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。 SQL Server 2000 支持兩種類型的觸發器:AFTER 觸發器和INSTEAD OF 觸發器。其中AFTER觸發器即為SQL Server 2000 版本以前所介紹的觸發器。該類型觸發器要求只有執行某一操作(Insert Update Delete) 之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於AFTER觸發器,可以定義哪一個觸發器被最先觸發,哪一個被最後觸發,通常使用系統過程sp_settriggerorder 來完成此任務。
INSTEAD OF觸發器表示並不執行其所定義的操作(Insert、 Update、 Delete),而僅是執行觸發器本身。既可在表上定義INSTEAD OF觸發器,也可以在視圖上定義INSTEAD OF 觸發器,但對同一操作只能定義一個INSTEAD OF 觸發器。 Create procere procere_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,並查詢此表中所有書籍的總金額 Createprocinsert_book@param1char(10),@param2varchar(20),@param3money,@---------加密asinsertintobook(編號,書名,價格)Values(@param1,@param2,@param3)select@param4=sum(價格)frombookgo執行例子:declare@total_pricemoneyexecinsert_book顛','Delphi控制項開發指南',$100,@total_priceoutputprint'總金額為'+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
print 'Fail'
go

10. plsql developer 里怎麼寫存儲過程,和執行存儲過程,怎麼查看存儲過程和出現什麼情況算成功執行存儲過程

--建立測試數據:
create table BOOK(編號 number(10),書名 varchar2(20),價格 varchar2(20))

insert into BOOK values(100,'aa','88.77')

select * from BOOK

--建立存儲過程:
create or replace procere query_BOOK(name IN OUT NUMBER,MY_BOOK OUT VARCHAR2,MY_BOOK2 OUT VARCHAR2) is
begin
select 編號 ,書名,價格 INTO name,MY_BOOK,MY_BOOK2 from BOOK where 編號=name;
end query_BOOK;

--調用存儲過程:
declare v_name number(10);
v_my_book varchar2(50);
v_my_book2 varchar2(20);
begin
v_name := 100;
query_BOOK(v_name,v_my_book,v_my_book2); --調用存儲過程
dbms_output.put_line('v_name is: '||v_name);
dbms_output.put_line('v_my_book is: '||v_my_book);
dbms_output.put_line('v_my_book2 is: '||v_my_book2);
exception
when others then
dbms_output.put_line(sqlerrm);
end;

ps:
plsql developer -->File-->new--->SQL window-->然後就可以在彈出的空白窗口裡寫了.
存儲過程寫完後,是否有錯,可以看plsql developer 的左邊列表:
選"My objects"-->proceres-->展開-->看你對應的存儲過程,如果存儲過程前面有紅色交叉,則表示存儲過程有錯.