sqlprocedureif
1. 很简单的问题!!数据库PL/sql中IF语句的用法!!
sal >= 2*nvl(sal_avg-sal_stddev,0) AND sal <= (2*nvl(sal_avg,0)+nvl(sal_stddev,0))
2. SQL语言if语句
if exists(select * from jy0702 a,jy0701 b where a.籍贯=b.籍贯)
select a.籍贯 from jy0702 a,jy0701 b where a.籍贯=b.籍贯
else select null
感觉这么写简单一点吧
3. SQL 中存储过程怎么使用
一、简单的储存过程:
1、创建一个存储过程
create procere GetUsers()
begin
select * from user;
end;12345
2、调用存储过程
call GetUsers();12
3、删除存储过程
drop procere if exists GetUsers;
二、带参数的存储过程
1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;
2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以@开始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量@minScore, @avgScore, @maxScore, 然后即可调用显示该变量的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、调用存储过程 :
call GetNameByID(1, @userName);
select @userName;123
4. sql 存储过程中 用case when 替代if else
SQL中的case when 只能用在查询语句中,不能单独使用,由于每个条件查询的表都不一样,改写不能
5. 在sql server2012中,if语句怎样显示select的结果我的只有返回值。在线等。代码如下
--用这个 我测试过了
CREATE Procere stu_age
@sno char(3)
,@return nvarchar(2)=null
AS BEGIN
--& ISNUMERIC(@sno) 如果你这地方是判断是否是数字 就这样写 & ISNUMERIC(@sno)=1
--你这样写是没有意义的
IF LEN(@sno)=3
BEGIN
SELECT @return=DATEDIFF(YEAR,sbirthday,GETDATE())
FROM student
WHERE sno=@sno
print @return
END
ELSE
BEGIN
print ('返回失败');
END
END
6. DB2 SQL PROCEDURE 中SIGNAL和RESIGNAL的含义和用法
可以通过SIGNAL和RESIGNAL来显示的触发一个指定的SQLSTATE.使用SIGNAL和RESIGNAL的MESSAGE_TEXT来设定伴随SQLSTATE的文本信息(可以理解为错误信息)。
在下面的例子中,在SQL procere定义了一个处理自定义SQLSTATE 72822的条件处理器(condition handler)。当执行SIGNAL 72822语句时,DB2调用条件处理器(Condition Handler),该条件处理器首先通过IF语句测试变量var,如果var等于OK,处理器重新定义SQLSTATE为72623,并且指定了一个text,如果var不等于OK时,处理器重新定义SQLSTATE为72319,同时指定一个text。
DECLARE EXIT HANDLER FOR SQLSTATE '72822' BEGIN IF ( var = 'OK' ) RESIGNAL SQLSTATE '72623' SET MESSAGE_TEXT = 'Got SQLSTATE 72822'; ELSE
RESIGNAL SQLSTATE '72319'
SET MESSAGE_TEXT = var;
END;
SIGNAL SQLSTATE '72822';
7. sql程序创建存储过程
create
procere
p_1(@参数1
类型,@参数2
类型)
as来定义带参数的存储过程,这样存储过程里面就可以使用你传递过来的参数了。跟平时写但参数的函数是一样的。
然后你调用的时候
exec
p1(参数1,参数2)
8. pl/sql if then语法
会不会是你 那个条件里面, 有括号没有合上啊?
SQL>DECLARE
2testvalueINT;
3BEGIN
4testvalue:=100;
5
6IFtestvalue>100THEN
7dbms_output.put_line('100+');
8ELSIFtestvalue=100THEN
9dbms_output.put_line('100');
10ELSE
11dbms_output.put_line('100-');
12ENDIF;
13
14END;
15/
100
PL/.
9. 动态执行sql语句是否有返回值可以判断是否成功
返回执行的上一个 Transact-SQL 语句的错误号。
Transact-SQL 语法约定
语法
@@ERROR
返回类型
integer
备注
如果前一个 Transact-SQL 语句执行没有错误,则返回 0。
如果前一个语句遇到错误,则返回错误号。如果错误是 sys.messages 目录视图中的错误之一,则 @@ERROR 将包含 sys.messages.message_id 列中表示该错误的值。可以在 sys.messages 中查看与 @@ERROR 错误号相关的文本信息。
由于 @@ERROR 在每一条语句执行后被清除并且重置,因此应在语句验证后立即查看它,或将其保存到一个局部变量中以备以后查看。
使用 TRY...CATCH 构造来处理错误。TRY...CATCH 构造也支持其他返回的错误信息多于 @@ERROR 的系统函数(ERROR_LINE、ERROR_MESSAGE、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE)。TRY...CATCH 也支持 ERROR_NUMBER 函数,但不限制该函数在语句产生错误后立即在语句中返回错误号。有关详细信息,请参阅 TRY...CATCH (Transact-SQL)。
示例
A. 用 @@ERROR 检测一个特定错误
以下示例用 @@ERROR 在 UPDATE 语句中检测约束检查冲突(错误 #547)。
复制代码
USE AdventureWorks;
GO
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 4
WHERE EmployeeID = 1;
IF @@ERROR = 547
PRINT N'A check constraint violation occurred.';
GO
B. 用 @@ERROR 有条件地退出一个过程
在此示例中,IF...ELSE 语句在存储过程中的 INSERT 语句后检测 @@ERROR。@@ERROR 变量的值将决定发送给调用程序的返回代码,以指示此过程的成功与失败。
复制代码
USE AdventureWorks;
GO
-- Drop the procere if it already exists.
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL
DROP PROCEDURE HumanResources.usp_DeleteCandidate;
GO
-- Create the procere.
CREATE PROCEDURE HumanResources.usp_DeleteCandidate
(
@CandidateID INT
)
AS
-- Execute the DELETE statement.
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = @CandidateID;
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT N'An error occurred deleting the candidate information.';
RETURN 99;
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT N'The job candidate has been deleted.';
RETURN 0;
END;
GO
C. 与 @@ROWCOUNT 一同使用 @@ERROR
下面的示例用 @@ERROR 和 @@ROWCOUNT 验证一条 UPDATE 语句的操作。为任何可能出现的错误而检验 @@ERROR 的值,而用 @@ROWCOUNT 保证更新已成功应用于表中的某行。