當前位置:首頁 » 存儲配置 » 存儲過程continue

存儲過程continue

發布時間: 2022-09-22 15:10:35

1. 執行存儲過程顯示 游標不存在


close kecheng_cousor
deallocate kechang_cousor
移到循環外

create procere add_record @sno char(9)
as
declare @total_num int,@cno char(4)
SET NOCOUNT on;

select @total_num= COUNT(*) from Student where Sno=@sno
if @total_num=0
begin
print'該學生不存在!'
return
end
else
begin
declare kecheng_cursor CURSOR FOR select cno from course
open kecheng_cousor
fetch next from kecheng_cursor into @cno
while @@FETCH_STATUS=0
begin
select @total_num=COUNT(*) from SC where Sno=@sno and Cno=@cno
if @total_num>0
begin
FETCH NEXT FROM kecheng_cousor into @cno
continue
end
else
begin
insert into SC(Sno,cno,grade)values(@sno,@cno,100*RAND())
fetch next from kecheng_cousor into @cno
end
end

close kecheng_cousor
deallocate kechang_cousor
end

2. Oracle 存儲過程 如何實現插入數據時出錯後,但還繼續執行

begin
insert …… ;--可能出錯的地方
exception
when others then
null;--出錯後跳到這里來。

end;

將可能出錯語句包裹起來,抓異常,不影響往下執行。

3. mysql的存儲過程中如何定義錯誤處理

declare是用來定義變數和常用處理、聲明之類的關鍵字。在mysql存儲過程出現之前declare是一塊雞肋,大家常用declare來定義局部變數,我習慣性的還是使用set來定義變數(雖然是全局的,但是來的方便)。 存儲過程出現後declare的標准處理定義就變成了非常強大的工具,可以用來為存儲過程添加一些非常強大的錯誤處理機制。 首先需要提一點的是declare定義變數如果想定義varchar型的,必須註明參數最大長度,即declare varchar(20). 在這里我們不深究它用來定義參數的小細節 我們主要來研究DECLARE Condition 和 DECLARE Handler DECLARE Condition 和 DECLARE Handler可以說是為了處理錯誤而生的。 功能上講DECLARE Condition出現的時間比較早,功能也比較簡單,它可以通過錯誤編號或者SQLSTATE來觸發一各名字,說明白一點就是當某個錯誤編號出現的時候替換一個名字給它。這樣調用的時候,我們不用去記一大串錯誤編號了。 它的標准語法我們可以在mysql的附註中找到。 DECLARE condition_name CONDITION FOR condition_value condition_value:例子如下:DECLARE errname CONDITION FOR SQLSTATE '23000' 將返回SQLSTATE信息為23000的錯誤定名為errname 這個名字就可以被我們的絕對重頭戲DECLARE Handler調用了,在DECLARE Handler中可以定義錯誤的處理辦法,可以使用begin和end來標記語句塊,可以單獨使用rollback。處理的過程也可以定義為繼續執行和中斷存儲過程。 標准語法:DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement handler_type: 處理的過程。 CONTINUE 繼續執行未完成的存儲過程,直至結束。(常用,默認) | EXIT 出現錯誤即自動跳出所在的begin不再執行後面的語句。 condition_value: 處理的觸發條件 SQLSTATE [VALUE] sqlstate_value 不用說了,最常用的錯誤定義,自己去查錯誤列表吧。 | condition_name 我們剛剛定義的那個名字errnmae就是用在這里的。 | SQLWARNING 這個太好用了,從錯誤編號01開始的錯誤。相當於錯誤的通配符。 | NOT FOUND 和上面差不多,從02開始。 | SQLEXCEPTION 上面兩個中沒有包括的錯誤它都可以用來觸發,就是說你想定義只要出錯就觸發的話就定義出錯條件為SQLWARNING+SQLEXCEPTION。 | mysql_error_code 錯誤編號,和第一個不一樣,不過同樣可以在錯誤列表從中查到,是我比較常用的。 例子DECLARE errname CONDITION FOR SQLSTATE '23000'; 給導致錯誤23000的錯誤定義名字為errname DECLARE continue handler for errname 當errname發生時作下面的處理 BEGIN 語句開始 set @x=1; 設置@x=1

4. mysql 存儲過程

.關於MySQL的存儲過程

存儲過程是資料庫存儲的一個重要的功能,但是MySQL在5.0以前並不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0終於開始已經支持存儲過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫編程的靈活性。

MySQL存儲過程的創建

(1).格式

MySQL存儲過程創建的格式:CREATE PROCEDURE過程名([過程參數[,...]])
[特性...]過程體

這里先舉個例子:

  • mysql>DELIMITER//

  • mysql>CREATEPROCEDUREproc1(OUTsint)

  • ->BEGIN

  • ->SELECTCOUNT(*)INTOsFROMuser;

  • ->END

  • ->//

  • mysql>DELIMITER;


  • 註:
  • (1)這里需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因為MySQL默認以";"為分隔符,如果我們沒有聲明分割符,那麼編譯器會把存儲過程當成SQL語句進行處理,則存儲過程的編譯過程會報錯,所以要事先用DELIMITER關鍵字申明當前段分隔符,這樣MySQL才會將";"當做存儲過程中的代碼,不會執行這些代碼,用完了之後要把分隔符還原。

    (2)存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這里有一個輸出參數s,類型是int型,如果有多個參數用","分割開。

    (3)過程體的開始與結束使用BEGIN與END進行標識。

5. 什麼是存儲過程

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 GO 例子說明: 該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表 (orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序。
編輯本段實例
資料庫存儲過程
資料庫存儲過程的實質就是部署在資料庫端的一組定義代碼以及SQL。將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來,那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。 利用SQL的語言可以編寫對於資料庫訪問的存儲過程,其語法如下: CREATE PROC[EDURE] procere_name [;number] [ {@parameter data_type} ][VARYING] [= default] [OUTPUT] ] [,...n] [WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] [FOR REPLICATION] AS sql_statement [...n] [ ]內的內容是可選項,而()內的內容是必選項, 例:若用戶想建立一個刪除表tmp中的記錄的存儲過程Select_delete可寫為: Create Proc select_del As Delete tmp 例:用戶想查詢tmp表中某年的數據的存儲過程 create proc select_query @year int as select * from tmp where year=@year 在這里@year是存儲過程的參數 例:該存儲過程是從某結點n開始找到最上層的父親結點,這種經常用到的過程可以由存儲過程來擔當,在網頁中重復使用達到共享。 空:表示該結點為頂層結點 fjdid(父結點編號) 結點n 非空:表示該結點的父親結點號 dwmc(單位名稱) CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output as declare @stop int declare @result varchar(80) declare @dwmc varchar(80) declare @dwid int set nocount on set @stop=1 set @dwmc="" select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold set @result=rtrim(@dwmc) if @dwid=0 set @stop=0 while (@stop=1) and (@dwid<>0) begin set @dwidold=@dwid select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold if @@rowcount=0 set @dwmc="" else set @result=@dwmc+@result if (@dwid=0) or (@@rowcount=0) set @stop=0 else continue end set @dwmcresult=rtrim(@result) 使用exec pro-name [pram1 pram2.....]
SQL Server中執行存儲過程
sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。 在SQL Server的查詢分析器中,輸入以下代碼: declare @tot_amt int execute order_tot_amt 1,@tot_amt output select @tot_amt 以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果。
Oracle中的存儲過程
1.創建過程 與其它的資料庫系統一樣,Oracle的存儲過程是用PL/SQL語言編寫的能完成一定處理功能的存儲在資料庫字典中的程序。 語法: create [or replace] procere procere_name [ (argment [ { in| in out }] type, argment [ { in | out | in out } ] type { is | as } <類型.變數的說明> ( 注: 不用 declare 語句 ) Begin <執行部分> exception <可選的異常處理說明> end; 1.1 這里的IN表示向存儲過程傳遞參數,OUT表示從存儲過程返回參數。而IN OUT 表示傳遞參數和返回參數; 1.2 在存儲過程內的參數只能指定參數類型;不能指定長度; 1.3 在AS或IS 後聲明要用到的變數名稱和變數類型及長度; 1.4 在AS或IS 後聲明變數不要加declare 語句。 2.使用過程 存儲過程建立完成後,只要通過授權,用戶就可以在SQLPLUS 、Oracle開發工具或第三方開發工具來調用運行。Oracle 使用EXECUTE 語句來實現對存儲過程的調用。 語法: EXEC[UTE] procere_name( parameter1, parameter2…); 3.開發過程 目前的幾大資料庫廠商提供的編寫存儲過程的工具都沒有統一,雖然它們的編寫風格有些相似,但由於沒有標准,所以各家的開發調試過程也不一樣。下面編寫PL/SQL存儲過程、函數、包及觸發器的步驟如下: 3.1 編輯存儲過程源碼使用文字編輯處理軟體編輯存儲過程源碼,要用類似WORD 文字處理軟體進行編輯時,要將源碼存為文本格式。 3.2 對存儲過程程序進行解釋在SQLPLUS或用調試工具將 存儲過程程序進行解釋; 在SQL>下調試,可用start 或get 等Oracle命令來啟動解釋。如: SQL>start c:\stat1.sql 如果使用調試工具,可直接編輯和點擊相應的按鈕即可生成存儲過程。[1] 3.3 調試源碼直到正確我們不能保證所寫的存儲過程達到一次就正確。所以這里的調試是每個程序員必須進行的工作之一。在SQLPLUS下來調試主要用的方法是: 1.使用 SHOW ERROR命令來提示源碼的錯誤位置; 2.使用 USER_ERRORS 數據字典來查看各存儲過程的錯誤位置。 3.4 授權執行權給相關的用戶或角色如果調試正確的存儲過程沒有進行授權,那就只有建立者本人才可以運行。所以作為應用系統的一部分的存儲過程也必須進行授權才能達到要求。 在SQLPLUS下可以用GRANT命令來進行存儲過程的運行授權。 語法: GRANT system_privilege | role TO user | role | PUBLIC [WITH ADMIN OPTION] 或 GRANT object_privilege | ALL column ON schema.object TO user | role | PUBLIC WITH GRANT OPTION 其中: system_privilege: 系統許可權 role: 角色名 user: 被授權的用戶名 object_privilege: 所授予的許可權名字,可以是 ALTER DELETE EXECUTE INDEX INSERT REFERENCES SELECT UPDATE Column: 列名 schema: 模式名 object: 對象名 4.數據字典 USER_SOURCE 用戶的存儲過程、函數的源代碼字典 DBA_SOURCE 整個系統所有用戶的存儲過程、函數的源代碼字典 ALL_SOURCE 當前用戶能使用的存儲過程(包括其她用戶授權)、函數的源代碼字典 USER_ERRORS 用戶的存儲過程、函數的源代碼存在錯誤的信息字典

6. 在oracle存儲過程中怎樣跳出本次循環

用exit關鍵字。
如:
declare
i int;
begin
i:=1;
while true
loop
dbms_output.put_line(i);
if i=100 then
exit;
end if;
i:=i+1;
end loop;
end;

7. db2存儲過程中循環話語while do的continue有沒有

Orcle中的PL/SQL中有以下幾種循環 第一種循環就能完成你的需求
1).無條件進入:
loop
exit when 條件;
循環體;
end loop;
2)有條件進入:
while 條件 loop
循環體;
end loop;
3).循環次數固定:
for 循環變數 in [reverse] 下界..上界 loop
循環體;
end loop;

8. mysql存儲過程中分支語句有哪些

存儲過程:
create procere p()
begin
/*thi procere does nothing*/
end;

1.參數
Parameters 參數
讓我們更進一步的研究怎麼在存儲過程中定義參數1. CREATE PROCEDURE p5
() ...
2. CREATE PROCEDURE p5
([IN] name data-type) ...
3. CREATE PROCEDURE p5
(OUT name data-type) ...
4. CREATE PROCEDURE p5
(INOUT name data-type) ...

2.Conditions and if-then-else 條件式和 if-then-else

3.Loops 循環語句
WHILE ... END WHILE
LOOP ... END LOOP
REPEAT ... END REPEAT
GOTO

4.DECLARE HANDLER syntax 聲明異常處理的語法
DECLARE
{ EXIT | CONTINUE }
HANDLER FOR
{ error-number | { SQLSTATE error-string } | condition }
SQL statement

5.Cursors 游標
游標實現功能摘要:
DECLARE cursor-name CURSOR FOR SELECT ...;
OPEN cursor-name;
FETCH cursor-name INTO variable [, variable];
CLOSE cursor-name;
已現經在可我以們完開成始基著本眼的游事標了務如。聲雖明然游我標們,的打存開儲游過標程,中從的游游標標里語法讀取還,並關沒閉有完游整標。

6.Functions 函數
Summary:
摘要 CREATE FUNCTION
Limitations of functions
函數的限制
我們已經很清楚可以在存儲過程中使用的元素了。下面我要講的是前面沒有提到的函數。

9. 存儲過程

--語 句 功 能
--數據操作
SELECT --從資料庫表中檢索數據行和列
INSERT --向資料庫表添加新數據行
DELETE --從資料庫表中刪除數據行
UPDATE --更新資料庫表中的數據
--數據定義
CREATE TABLE --創建一個資料庫表
DROP TABLE --從資料庫中刪除表
ALTER TABLE --修改資料庫表結構
CREATE VIEW --創建一個視圖
DROP VIEW --從資料庫中刪除視圖
CREATE INDEX --為資料庫表創建一個索引
DROP INDEX --從資料庫中刪除索引
CREATE PROCEDURE --創建一個存儲過程
DROP PROCEDURE --從資料庫中刪除存儲過程
CREATE TRIGGER --創建一個觸發器
DROP TRIGGER --從資料庫中刪除觸發器
CREATE SCHEMA --向資料庫添加一個新模式
DROP SCHEMA --從資料庫中刪除一個模式
CREATE DOMAIN --創建一個數據值域
ALTER DOMAIN --改變域定義
DROP DOMAIN --從資料庫中刪除一個域
--數據控制
GRANT --授予用戶訪問許可權
DENY --拒絕用戶訪問
REVOKE --解除用戶訪問許可權
--事務控制
COMMIT --結束當前事務
ROLLBACK --中止當前事務
SET TRANSACTION --定義當前事務數據訪問特徵
--程序化SQL
DECLARE --為查詢設定游標
EXPLAN --為查詢描述數據訪問計劃
OPEN --檢索查詢結果打開一個游標
FETCH --檢索一行查詢結果
CLOSE --關閉游標
PREPARE --為動態執行准備SQL 語句
EXECUTE --動態地執行SQL 語句
DESCRIBE --描述准備好的查詢
---局部變數
declare @id char(10)
--set @id = '10010001'
select @id = '10010001'
---全局變數
---必須以@@開頭

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --列印字元串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
case
when job_level = 』1』 then e_wage*1.08
when job_level = 』2』 then e_wage*1.07
when job_level = 』3』 then e_wage*1.06
else e_wage*1.05
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --列印變數x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --列印變數c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay 』01:02:03』
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time 』23:08:00』
select * from employee

***SELECT***

select *(列名) from table_name(表名) where column_name operator
value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
stockname like '[^F-M]%' --------- (^排除指定范圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where
stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name ---------
distinct指定檢索獨有的列值,不重復
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from
table_name
select stockname , "stocknumber" = count(*) from table_name
group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組

select *
from table1, table2
where table1.id *= table2.id --------
左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接

select stockname from table1
union [all] ----- union合並查詢結果集,all-保留重復行
select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number) value
("xxx","xxxx")
value (select Stockname , Stocknumber from
Stock_table2)---value為select語句

***update***

update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4

***delete***

delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表

***alter table*** --- 修改資料庫表結構

alter table database.owner.table_name add column_name char(2)
null .....
sp_help table_name ---- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname
varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ----
刪除Stockname的default約束

***function(/*常用函數*/)***

----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id

--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)

--STDEV()
--STDEV()函數返回表達式中所有數據的標准差

--STDEVP()
--STDEVP()函數返回總體標准差

--VAR()
--VAR()函數返回表達式中所有值的統計變異數

--VARP()
--VARP()函數返回總體變異數

----算術函數----

/***三角函數***/
SIN(float_expression_) --返回以弧度表示的角的正弦
COS(float_expression_) --返回以弧度表示的角的餘弦
TAN(float_expression_) --返回以弧度表示的角的正切
COT(float_expression_) --返回以弧度表示的角的餘切
/***反三角函數***/
ASIN(float_expression_) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression_) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression_) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression_1,float_expression_2)
--返回正切是float_expression_1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression_)
--把弧度轉換為角度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression_) --把角度轉換為弧度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression_) --返回表達式的指數值
LOG(float_expression_) --返回表達式的自然對數值
LOG10(float_expression_)--返回表達式的以10 為底的對數值
SQRT(float_expression_) --返回表達式的平方根
/***取近似值函數***/
CEILING(numeric_expression_) --返回>=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression_) --返回<=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression_) --返回以integer_expression_
為精度的四捨五入值返回的數據
--類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression_) --返回表達式的絕對值返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression_) --測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
--與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression_]) --用任選的[integer_expression_]做種子值得出0-1
間的隨機浮點數

----字元串函數----
ASCII() --函數返回字元表達式最左端字元的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字元串全部轉換為小寫
UPPER() --函數把字元串全部轉換為大寫
STR() --函數把數值型數據轉換為字元型數據
LTRIM() --函數把字元串頭部的空格去掉
RTRIM() --函數把字元串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字元串
CHARINDEX(),PATINDEX() --函數返回字元串中某個指定的子串出現的開始位置
SOUNDEX() --函數返回一個四位字元碼
--SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回0 值
DIFFERENCE() --函數返回由SOUNDEX 函數返回的兩個字元表達式的值的差異
--0 兩個SOUNDEX 函數返回值的第一個字元不同
--1 兩個SOUNDEX 函數返回值的第一個字元相同
--2 兩個SOUNDEX 函數返回值的第一二個字元相同
--3 兩個SOUNDEX 函數返回值的第一二三個字元相同
--4 兩個SOUNDEX 函數返回值完全相同

QUOTENAME() --函數返回被特定字元括起來的字元串
/*select quotename('abc', '{') quotename('abc')
運行結果如下
----------------------------------{
{abc} [abc]*/

REPLICATE() --函數返回一個重復character_expression_ 指定次數的字元串
/*select replicate('abc', 3) replicate( 'abc', -2)
運行結果如下
----------- -----------
abcabcabc NULL*/

REVERSE() --函數將指定的字元串的字元排列順序顛倒
REPLACE() --函數返回被替換了指定子串的字元串
/*select replace('abc123g', '123', 'def')
運行結果如下
----------- -----------
abcdefg*/

SPACE() --函數返回一個有指定長度的空白字元串
STUFF() --函數用另一子串替換字元串指定位置長度的子串

----數據類型轉換函數----
CAST() 函數語法如下
CAST() (<expression_> AS <data_ type>[ length ])
CONVERT() 函數語法如下
CONVERT() (<data_ type>[ length ], <expression_> [, style])

select cast(100+99 as char) convert(varchar(12), getdate())
運行結果如下
------------------------------ ------------
199 Jan 15 2000

----日期函數----
DAY() --函數返回date_expression_ 中的日期值
MONTH() --函數返回date_expression_ 中的月份值
YEAR() --函數返回date_expression_ 中的年份值
DATEADD(<datepart> ,<number> ,<date>)
--函數返回指定日期date 加上指定的額外日期間隔number 產生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函數返回兩個指定日期在datepart 方面的不同之處
DATENAME(<datepart> , <date>) --函數以字元串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數以整數值的形式返回日期的指定部分
GETDATE() --函數以DATETIME 的預設格式返回系統當前的日期和時間

----系統函數----
APP_NAME() --函數返回當前執行的應用程序的名稱
COALESCE() --函數返回眾多表達式中第一個非NULL 表達式的值
COL_LENGTH(<'table_name'>, <'column_name'>) --函數返回表中指定欄位的長度值
COL_NAME(<table_id>, <column_id>) --函數返回表中指定欄位的名稱即列名
DATALENGTH() --函數返回數據表達式的數據的實際長度
DB_ID(['database_name']) --函數返回資料庫的編號
DB_NAME(database_id) --函數返回資料庫的名稱
HOST_ID() --函數返回伺服器端計算機的名稱
HOST_NAME() --函數返回伺服器端計算機的名稱
IDENTITY(<data_type>[, seed increment]) [AS column_name])
--IDENTITY() 函數只在SELECT INTO 語句中使用用於插入一個identity column列到新表中
/*select identity(int, 1, 1) as column_name
into newtable
from oldtable*/
ISDATE() --函數判斷所給定的表達式是否為合理日期
ISNULL(<check_expression_>, <replacement_value>) --函數將表達式中的NULL
值用指定值替換
ISNUMERIC() --函數判斷所給定的表達式是否為合理的數值
NEWID() --函數返回一個UNIQUEIDENTIFIER 類型的數值
NULLIF(<expression_1>, <expression_2>)
--NULLIF 函數在expression_1 與expression_2 相等時返回NULL
值若不相等時則返回expression_1 的值

sql中的保留字

action add aggregate all
alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
cross current_date current_time current_timestamp
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procere process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_updates sql_log_off sql_log_update
sql_select_limit
sql_small_result sql_big_result sql_warnings straight_join
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill

--WAITFOR
--例 等待1 小時2 分零3 秒後才執行SELECT 語句
waitfor delay 』01:02:03』
select * from employee
--例 等到晚上11 點零8 分後才執行SELECT 語句
waitfor time 』23:08:00』
select * from employee

***SELECT***

select *(列名) from table_name(表名) where column_name operator
value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname = 'str_name'
stockname like '% find this %'
stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)
stockname like '[^F-M]%' --------- (^排除指定范圍)
--------- 只能在使用like關鍵字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber between 20 and 100
stocknumber in(10,20,30)
order by stockid desc(asc) --------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列號
stockname = (select stockname from stock_information where
stockid = 4)
--------- 子查詢
--------- 除非能確保內層select只返回一個行的值,
--------- 否則應在外層where子句中用一個in限定符
select distinct column_name form table_name ---------
distinct指定檢索獨有的列值,不重復
select stocknumber ,"stocknumber + 10" = stocknumber + 10 from
table_name
select stockname , "stocknumber" = count(*) from table_name
group by stockname
--------- group by 將表按行分組,指定列中有相同的值
having count(*) = 2 --------- having選定指定的組

select *
from table1, table2
where table1.id *= table2.id --------
左外部連接,table1中有的而table2中沒有得以null表示
table1.id =* table2.id -------- 右外部連接

select stockname from table1
union [all] ----- union合並查詢結果集,all-保留重復行
select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number) value
("xxx","xxxx")
value (select Stockname , Stocknumber from
Stock_table2)---value為select語句

***update***

update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname = default
Stockname = null
Stocknumber = Stockname + 4

***delete***

delete from table_name where Stockid = 3
truncate table_name ----------- 刪除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全刪除表

***alter table*** --- 修改資料庫表結構

alter table database.owner.table_name add column_name char(2)
null .....
sp_help table_name ---- 顯示表已有特徵
create table table_name (name char(20), age smallint, lname
varchar(30))
insert into table_name select ......... ----- 實現刪除列的方法(創建新表)
alter table table_name drop constraint Stockname_default ----
刪除Stockname的default約束

***function(/*常用函數*/)***

----統計函數----
AVG --求平均值
COUNT --統計數目
MAX --求最大值
MIN --求最小值
SUM --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id

--MAX
--求工資最高的員工姓名
use pangu
select e_name
from employee
where e_wage =
(select max(e_wage)
from employee)

--STDEV()
--STDEV()函數返回表達式中所有數據的標准差

--STDEVP()
--STDEVP()函數返回總體標准差

--VAR()
--VAR()函數返回表達式中所有值的統計變異數

--VARP()
--VARP()函數返回總體變異數

----算術函數----

/***三角函數***/
SIN(float_expression_) --返回以弧度表示的角的正弦
COS(float_expression_) --返回以弧度表示的角的餘弦
TAN(float_expression_) --返回以弧度表示的角的正切
COT(float_expression_) --返回以弧度表示的角的餘切
/***反三角函數***/
ASIN(float_expression_) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression_) --返回餘弦是FLOAT 值的以弧度表示的角
ATAN(float_expression_) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression_1,float_expression_2)
--返回正切是float_expression_1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression_)
--把弧度轉換為角度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
RADIANS(numeric_expression_) --把角度轉換為弧度返回與表達式相同的數據類型可為
--INTEGER/MONEY/REAL/FLOAT 類型
EXP(float_expression_) --返回表達式的指數值
LOG(float_expression_) --返回表達式的自然對數值
LOG10(float_expression_)--返回表達式的以10 為底的對數值
SQRT(float_expression_) --返回表達式的平方根
/***取近似值函數***/
CEILING(numeric_expression_) --返回>=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
FLOOR(numeric_expression_) --返回<=表達式的最小整數返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
ROUND(numeric_expression_) --返回以integer_expression_
為精度的四捨五入值返回的數據
--類型與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
ABS(numeric_expression_) --返回表達式的絕對值返回的數據類型與表達式相同可為
--INTEGER/MONEY/REAL/FLOAT 類型
SIGN(numeric_expression_) --測試參數的正負號返回0 零值1 正數或-1 負數返回的數據類型
--與表達式相同可為INTEGER/MONEY/REAL/FLOAT 類型
PI() --返回值為π 即3.1415926535897936
RAND([integer_expression_]) --用任選的[integer_expression_]做種子值得出0-1
間的隨機浮點數

----字元串函數----
ASCII() --函數返回字元表達式最左端字元的ASCII 碼值
CHAR() --函數用於將ASCII 碼轉換為字元
--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER() --函數把字元串全部轉換為小寫
UPPER() --函數把字元串全部轉換為大寫
STR() --函數把數值型數據轉換為字元型數據
LTRIM() --函數把字元串頭部的空格去掉
RTRIM() --函數把字元串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函數返回部分字元串
CHARINDEX(),PATINDEX() --函數返回字元串中某個指定的子串出現的開始位置
SOUNDEX() --函數返回一個四位字元碼
--SOUNDEX函數可用來查找聲音相似的字元串但SOUNDEX函數對數字和漢字均只返回0 值
DIFFERENCE() --函數返回由SOUNDEX 函數返回的兩個字元表達式的值的差異
--0 兩個SOUNDEX 函數返回值的第一個字元不同
--1 兩個SOUNDEX 函數返回值的第一個字元相同
--2 兩個SOUNDEX 函數返回值的第一二個字元相同
--3 兩個SOUNDEX 函數返回值的第一二三個字元相同
--4 兩個SOUNDEX 函數返回值完全相同

熱點內容
androiddimens 發布:2025-03-26 01:37:00 瀏覽:470
電視出現認證伺服器無響應怎麼辦 發布:2025-03-26 01:33:21 瀏覽:685
linux安裝mysql55 發布:2025-03-26 01:31:10 瀏覽:758
如何遠程登錄家裡的伺服器 發布:2025-03-26 01:10:49 瀏覽:762
河北長城dns伺服器地址 發布:2025-03-26 01:07:05 瀏覽:837
社保的卡銀行密碼是多少 發布:2025-03-26 01:00:28 瀏覽:974
買手機如何看是正品安卓 發布:2025-03-26 00:28:25 瀏覽:363
對象沒有存儲類型 發布:2025-03-26 00:10:03 瀏覽:402
相冊編程代碼 發布:2025-03-25 23:59:07 瀏覽:741
絕地求生安卓登不進去怎麼辦 發布:2025-03-25 23:58:58 瀏覽:863