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 保證更新已成功應用於表中的某行。