這裡蒐索程式師資訊,查找有用的技術資料
当前位置:首页 » 服务存储 » 存储过程中的书名号
扩展阅读
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-->展开-->看你对应的存储过程,如果存储过程前面有红色交叉,则表示存储过程有错.