当前位置:首页 » 服务存储 » 存储过程中单据通过后也有消息
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储过程中单据通过后也有消息

发布时间: 2022-07-27 18:38:53

A. 存储过程的问题

CREATE PROCEDURE dbo.EA_List
@ClassID int,
@NClassID int,
@Page int,
@PageSize int,
@TableArticle varchar(20)
AS
Begin
Declare @CmdTxt varchar(1024)
--生成命令
if (@Page <= 1)

Set @CmdTxt=
'
Select Top ' + Cast(@PageSize as varchar(10)) +' ID,Title,Author,AddDate,Hits,Remark,TitleColor
From ' +@TableArticle +'
Where ClassID='+ Cast(@ClassID as varchar(10))+' AND NClassID=' + Cast(@NClassID as varchar(10))+'
ORDER BY ID DESC
'
ELSE

Set @CmdTxt=
'
Select Top '+ Cast(@PageSize as varchar(10)) +' ID,Title,Author,AddDate,Hits,Remark,TitleColor
From ' +@TableArticle +'
Where ClassID='+ Cast(@ClassID as varchar(10))+' AND NClassID=' + Cast(@NClassID as varchar(10))+' AND ID Not In
(
Select Top '+Cast(@PageSize * ( @Page - 1 ) as varchar(10)) +' ID
From ' +@TableArticle +'
Where ClassID='+ Cast(@ClassID as varchar(10))+' AND NClassID=' + Cast(@NClassID as varchar(10))+'
ORDER BY ID DESC
)
ORDER BY ID DESC
'
--执行
Exec @CmdTxt

End
GO
/*
写代码要有一定的层次结构,
要不然让人很难读[特别是长的时候].
该代码我在sql SERVER 2000 下测试通过.
*/

B. 存储过程怎么写啊

//创建存储过程

CREATE PROCEDURE userData(

IN id INT

)

BEGIN

SELECT * from userdata WHERE userflag = id;

END;

其中IN是传进去的变量;

drop procere userData;//销毁这个存储过程。

call userData(2) //调用存储过程。

(2)存储过程中单据通过后也有消息扩展阅读:

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这两个语句。

参考资料来源:网络-储存过程



C. 如何在存储过程中添加语句进行单据控制

存储过程的结果无法直接与select 做union,一个办法是建一张临时表,或者使用表变量,通过insert into exec将存储过程的内容暂存起来,最后做union,大概语句像这样: declare @table table(...);insert into @tableexec zjsj '10901';select * ...

D. 存储过程中的 procere、function和 package是干什么的,需要详细介绍

procere:过程
function:函数
package:包

一、过程
PL/SQL过程是一个编译到oracle数据库模式的单机程序。过程可以接受参数。当编译一个过程时,CREATE PROCEDURE语句的过程标识符成为数

据字典中的对象名。
CREATE OR REPLACE PPROCEDURE procere_name (optional parameters) IS | AS
declarative part
BEGIN
program body
EXCEPTION
exception handler
END procere_name;

Declarative Part 是声明变量的地方,比如:
local_counter NUMBER := 0;
也可以声明复合类型结构,如records和tables
也可以声明异常,但必须在Exception部门进行处理。
Subprogram Body 包含使用PL/SQL控制结构的逻辑算法实现。PL/SQL控制结构支持loops、if-then-else、case、和声明块结构。
Exception handler 可选,类似于其他语言的try-catch模型,你可以对特定错误类型或一般异常编写处理器.

应当以动词来命名一个过程。过程常常执行一些操作如更新数据库、写数据到一个文件或者发送一条消息。
一个过程不必要有参数,如果没有参数创建过程是不需要括号。当调用一个过程时(过程没有参数)括号是可选的。
例如:
CREATE OR REPLACE PROCEDURE insert_temp IS
BEGIN
INSERT INTO TEMP (n) VALUES (0);
END insert_temp:

sqlplus调用过程:
SQL>execute insert_temp;
SQL>execute insert_temp();
都是正确的。

IS 或 AS关键字是一样的,都可以用。
PROCEDURE insert_temp IS | AS

END关键字后加过程名也是可选的,但建议加过程名。一个过程可能跨越几屏的长度,当滚屏时,有助于看到END子句知道没有跳到下一个包过

程中。

完整的过程结构如下:
CREATE OR REPLACE PROCEDURE print_temp
IS
v_average NUMBER;
v_sum NUMBER;
BEGIN
SELECT AVG(n), SUM(n) INTO v_average, v_sum
FROM TEMP;

dbms_output.put_line('Average:'||v_average);
dbms_output.put_line('Sum:'||v_sum);
END print_temp;

二、函数
函数提供了获取对象状态和情形信息的手段,函数有返回值。
CREATE OR REPLACE FUNCTION student_status(optional parameters)
RETURN VARCHAR2 IS
declarative part
BEGIN
program body
RETURN expression;
EXCEPTION
exception handler code
that should include a RETURN
END student_student_status;

参数是可选的,但RETURN语句是必须的。FUNCTION必须有一个return 语句。
下面的例子是返回一个DATE类型的函数:
CREATE OR REPLACE FUNCTION tomorrow RETURN DATE
IS
next_day DATE;
BEGIN
next_day := SYSDATE + 1;
RETURN next_day;
END tomorrow;

函数中的return语句可以是一个表达式,上面函数可以直接返回一个表达式而不用本地变量:
FUNCTION tomorrow RETURN DATE IS
BEGIN
RETURN SYSDATE + 1;
END tomorrow;
函数于过程结果相似,只是函数返回值,而过程不返回值

三、包说明
1、语法和风格
包说明基本语法:
CREATE PACKAGE package_name IS
Type definitions for records, index-by tables,
varrays, nested tables
Constants
Exceptions
Global variable declarations
PROCEDURE procere_name_1 (parameters & types);
PROCEDURE procere_name_2 (parameter & types);
FUNCTION function_name_1 (parameters & types) RETURN type;
END package_name;

包说明中过程和函数没有顺序限制。
包主体将包含包说明中每一个子程序的PL/SQL代码。包说明中的每一个子程序包体中必须有相应的子程序体。
在包说明中的数据对象声明是全局的。因此,仅声明需要全局定义的对象。
在包体内的过程语句,包括子程序名、参数名、参数模式、参数类型,必须匹配包说明中的过程语句。同样,函数也是一样。
包主体模板如下:
CREATE PACKAGE BODY package_name IS
PROCEDURE procere_name_1 (parameters & types)
IS
local variables
BEGIN
body of code
END procere_name_1;
PROCEDURE procere_name_2 (parameter & types)
IS
local variables
BEGIN
body_of_code
END procere_name_2;
FUNCTION function_name_1 (parameters & types) RETURN type
IS
local variables
BEGIN
body of code
RETURN statement;
END function_name_1;
END package_name;

2、示例:

CREATE OR REPLACE PACKAGE students_pkg IS
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL);

FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER;
END students_pkg;

四、包主体
下面是上例的包主体实现:
CREATE OR REPLACE PACKAGE BODY students_pkg IS
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL)
IS
BEGIN
INSERT INTO students VALUES
('A'||students_pk_seq.NEXTVAL,
v_student_name,
v_college_major,
v_status,
v_state,
v_license_no);
END add_student;

FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER
IS
ccount INTEGER;
BEGIN
SELECT COUNT (*) INTO ccount
FROM students, major_lookup
WHERE students.college_major = major_lookup.major
AND major_lookup.major_desc =
nvl(v_major,major_lookup.major_desc)
AND students.status = nvl(v_status,students.status);
RETURN ccount;
END NO_OF_STUDENTS;
END students_pkg;

开发包主体可能需要其他本地过程和函数,这些是隐藏的,叫私有(过程或函数)。
常常情况下要把一个单独的过程放入一个新包或一个已存在包里面。
PACKAGE temp_operations IS
PROCEDURE insert_temp;
END temp_operations;

PACKAGE BODY temp_operations IS
PROCEDURE insert_temp IS
BEGIN
INSERT INTO temp (n) VALUES (0);
END insert_temp;
END temp_operations;

使用下面方式调用:
temp_operations.insert_temp;
temp_operations.insert_temp();

http://yaoayao.javaeye.com/blog/710706

E. 用sql编写存储过程,点击分析出现3个“消息 102,级别 15,状态 1,第 1 行 'go' 附近有语法错误。”

我现在也遇到这种问题了
ALTER VIEW [dbo].[OV收文归档1]
AS
SELECT 公文ID, 标题, 收文机关, 发文机关, 主题词, 收发类别, 摘要, 缓急, 公文类型, 密级, 处理期限, 份数, 公文FID, 归档位置, 公文编号, 备注, 收文时间, 文件作者, 发文时间,
处理意见, 成果状态, 拟稿单位, 拟稿人, 办理结果, 核稿, 稿签FID, 主送单位, 抄送单位1, 抄送单位2, 抄送单位3, 抄送单位4, 公文内类型, 校对, 完成登记, 签发单FID,
抄送单位, 相关文号, 签发人, 收文编号, 发文编号
FROM dbo.OT公文
WHERE (收发类别 = 0)
GO

消息 102,级别 15,状态 1,过程 OV收文归档1,第 1 行
'GO' 附近有语法错误。

F. SQL server新建查询 存储过程执行后为什么总是命令已经完成,执行的结果在那里可以看到

首先要确定你的存储过程是否有输出参数(output)还要看执行存储过程的时候是否正确最后,确定一切都没有问题的时候,那可能就是你的输出结果不是表格是文本,那你就可以修改结果的显示方式了~

G. .NET执行存储过程如何得到消息框中的结果

你的数据库登录用户不是SA吧,如果是别从分配的权限那么你就没有修改的权限,你用SA登录或者

在数据库安全性-登录名中找到你的用户名-右键=属性-用户映射-找到你要修改的哪个数据库

然后按图把权限打上勾就行了,这里的设置需要SA来设置

H. sql中如何通过存储过程返回结果集

引用
4

oraclefans_
的回复:想麻烦了。。你直接返回游标就是一个结果集合。。CREATE
OR
REPLACE
PROCEDURE
USP_RETN_VAL(
RETN_VAL_CUR
OUT
sys_refcursor)ISBEGIN
OPEN
RETN_VAL_CUR
FOR
SELECT
*
FROM
TBL1;END;调用declare
cur
sys_refcurso……谢谢
但是我是想执行一个存储过程后,直接返回表里所有数据,不要再去操作游标。

I. 请教sql存储过程问题。

你在存储过程中调用了本身这个存储过程(这就是嵌套调用),而且未加任何条件限制, 类似于一直调用此存储过程,造成死循环调用。而数据库为了避免这样的调用,只允许嵌套执行32次,超出就发生异常。
所以,请不要进行这样的嵌套调用(就是不要在存储过程中调用自己),或者添加调用条件。