中間表和存儲過程sql
❶ sql server 如何建立中間表,使得所在的表1和表2數據自動存入中間表3中
為啥性別要分成兩列,用一列不行嗎?
表一和表二,只能用姓名做主鍵(出現重名就出錯了,最好用唯一的id做主鍵)
select b.name1, b.age,a.sex from 表1 a ,表2 b where a.name=b.name1
如果你非要把性別拆成兩列的話
select b.name1, b.age,case when a.sex =N'男' then a.sex else null end as sex1 ,
case when a.sex =N'女' then a.sex else null end as sex2
from 表1 a ,表2 b where a.name=b.name1
❷ sql語句中間表建立(要有詳細的sql語句哦)
--- 如果id有字母可以換成varchar類型
create table 學生表 (學生id int ,姓名 varchar(200))
create table 課程表 (課程id int ,課程名稱 varchar(500))
create table 中間表 (學生id int ,課程id int ,成績 int )
❸ 求助,sql語句優化,超長的語句
太長的就建議用中間表,存儲過程一類的協助查詢了
EXISTS
(SELECT U.CONTROLTYPE
FROM USERCONTROLTYPE U
WHERE B.CONTROLTYPE = U.CONTROLTYPE AND
U.USERID = '030002') and
controltype in ('001', '003', '010')
GROUP BY B.SETID,
❹ SQL語句中兩個表的連接
1、打開資料庫管理工具,在資料庫中新建兩個表用於測試,這里,兩個表的表結構要一樣,分別建立TEST 和 TEST1。
❺ SQL資料庫增量式同步如何實現
寫個觸發器把更新的部分記錄到一張中間表中,然後定時調用存儲過程將中間表的數據同步到要同步的資料庫,完成後刪除已經同步的中間表中的數據。
❻ SQL 中間表是什麼為什麼要用中間表
中間表?是臨時表吧,臨時表的好處是只存在一個會話中,當這個會話結束時會自動刪除臨時表和釋放臨時表所佔用的資源,使用靈活。
❼ oracle SQL語句中怎麼樣調用存儲過程
PL/SQL是ORACLE對標准資料庫語言的擴展,ORACLE公司已經將PL/SQL整合到ORACLE 伺服器和其他工具中了,近幾年中更多的開發人員和DBA開始使用PL/SQL,本文將講述PL/SQL基礎語法,結構和組件、以及如何設計並執行一個PL/SQL程序。
PL/SQL的優點
從版本6開始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的優點以及其獨有的數據管理的便利性,那麼你很難想像ORACLE缺了PL/SQL的情形。PL/SQL 不是一個獨立的產品,他是一個整合到ORACLE伺服器和ORACLE工具中的技術,可以把PL/SQL看作ORACLE伺服器內的一個引擎,sql語句執行者處理單個的sql語句,PL/SQL引擎處理PL/SQL程序塊。當PL/SQL程序塊在PL/SQL引擎處理時,ORACLE伺服器中的SQL語句執行器處理pl/sql程序塊中的SQL語句。
PL/SQL的優點如下:
. PL/SQL是一種高性能的基於事務處理的語言,能運行在任何ORACLE環境中,支持所有數據處理命令。通過使用PL/SQL程序單元處理SQL的數據定義和數據控制元素。
. PL/SQL支持所有SQL數據類型和所有SQL函數,同時支持所有ORACLE對象類型
. PL/SQL塊可以被命名和存儲在ORACLE伺服器中,同時也能被其他的PL/SQL程序或SQL命令調用,任何客戶/伺服器工具都能訪問PL/SQL程序,具有很好的可重用性。
. 可以使用ORACLE數據工具管理存儲在伺服器中的PL/SQL程序的安全性。可以授權或撤銷資料庫其他用戶訪問PL/SQL程序的能力。
. PL/SQL代碼可以使用任何ASCII文本編輯器編寫,所以對任何ORACLE能夠運行的操作系統都是非常便利的
. 對於SQL,ORACLE必須在同一時間處理每一條SQL語句,在網路環境下這就意味作每一個獨立的調用都必須被oracle伺服器處理,這就佔用大量的伺服器時間,同時導致網路擁擠。而PL/SQL是以整個語句塊發給伺服器,這就降低了網路擁擠。
PL/SQL塊結構
PL/SQL是一種塊結構的語言,組成PL/SQL程序的單元是邏輯塊,一個PL/SQL 程序包含了一個或多個邏輯塊,每個塊都可以劃分為三個部分。與其他語言相同,變數在使用之前必須聲明,PL/SQL提供了獨立的專門用於處理異常的部分,下面描述了PL/SQL塊的不同部分:
聲明部分(Declaration section)
聲明部分包含了變數和常量的數據類型和初始值。這個部分是由關鍵字DECLARE開始,如果不需要聲明變數或常量,那麼可以忽略這一部分;需要說明的是游標的聲明也在這一部分。
執行部分(Executable section)
執行部分是PL/SQL塊中的指令部分,由關鍵字BEGIN開始,所有的可執行語句都放在這一部分,其他的PL/SQL塊也可以放在這一部分。
異常處理部分(Exception section)
這一部分是可選的,在這一部分中處理異常或錯誤,對異常處理的詳細討論我們在後面進行。
PL/SQL塊語法
[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END
PL/SQL塊中的每一條語句都必須以分號結束,SQL語句可以使多行的,但分號表示該語句的結束。一行中可以有多條SQL語句,他們之間以分號分隔。每一個PL/SQL塊由BEGIN或DECLARE開始,以END結束。注釋由--標示。
PL/SQL塊的命名和匿名
PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊。匿名程序塊可以用在伺服器端也可以用在客戶端。
命名程序塊可以出現在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執行部分引用,也可以在異常處理部分引用。
PL/SQL程序塊可背獨立編譯並存儲在資料庫中,任何與資料庫相連接的應用程序都可以訪問這些存儲的PL/SQL程序塊。ORACLE提供了四種類型的可存儲的程序:
. 函數
. 過程
. 包
. 觸發器
函數
函數是命名了的、存儲在資料庫中的PL/SQL程序塊。函數接受零個或多個輸入參數,有一個返回值,返回值的數據類型在創建函數時定義。定義函數的語法如下:
FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]
過程
存儲過程是一個PL/SQL程序塊,接受零個或多個參數作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數不同,存儲過程沒有返回值,存儲過程不能由SQL語句直接使用,只能通過EXECUT命令或PL/SQL程序塊內部調用,定義存儲過程的語法如下:
PROCEDURE name [(parameter[,parameter,...])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]
包(package)
包其實就是被組合在一起的相關對象的集合,當包中任何函數或存儲過程被調用,包就被載入入內存中,包中的任何函數或存儲過程的子程序訪問速度將大大加快。
包由兩個部分組成:規范和包主體(body),規范描述變數、常量、游標、和子程序,包體完全定義子程序和游標。
觸發器(trigger)
觸發器與一個表或資料庫事件聯系在一起的,當一個觸發器事件發生時,定義在表上的觸發器被觸發。
變數和常量
變數存放在內存中以獲得值,能被PL/SQL塊引用。你可以把變數想像成一個可儲藏東西的容器,容器內的東西是可以改變的。
聲明變數
變數一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變數前必須首先聲明,要在執行或異常處理部分使用變數,那麼變數必須首先在聲明部分進行聲明。
聲明變數的語法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在聲明變數的同時給變數強制性的加上NOT NULL約束條件,此時變數在初始化時必須賦值。
給變數賦值
給變數賦值有兩種方式:
. 直接給變數賦值
X:=200;
Y=Y+(X*20);
. 通過SQL SELECT INTO 或FETCH INTO給變數賦值
SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;
常量
常量與變數相似,但常量的值在程序內部不能改變,常量的值在定義時賦予,,他的聲明方式與變數相似,但必須包括關鍵字CONSTANT。常量和變數都可被定義為SQL和用戶定義的數據類型。
ZERO_VALUE CONSTANT NUMBER:=0;
這個語句定了一個名叫ZERO_VALUE、數據類型是NUMBER、值為0的常量。
標量(scalar)數據類型
標量(scalar)數據類型沒有內部組件,他們大致可分為以下四類:
. number
. character
. date/time
. boolean
❽ 高分求助SQL存儲過程詳細分析,最好每句解釋一下
ALTER procere [dbo].[wvsp_updateTaskStatus]
@ttype int,
@id int,
@status int // 這一段主要是定義存儲過程需要的參數
as
begin 開始存儲過程
if @ttype=0 // 開始判斷 如果傳進來的@ttype=0
begin //開始執行
if (@status=3) //如果(@status=3)
begin //開始執行函數
insert into tb_queuelog([type],mid,code,otherparams,created) //往表名為tb_queuelog的表插入數據,以上為要插入的欄位
select @ttype,mid,code,otherparams,created
from tb_mergequeue
where id=@id //要插入欄位的數據從表tb_mergequeue 搜索出來,與上表要插入的欄位一一對應,搜索條件為:id=@id
delete from tb_mergequeue
where id=@id //刪除tb_mergequeue表中where id=@id的欄位
end //結束@status=3條件循環
else//如果(@status不等於3,進入另一個方法
update tb_mergequeue
set status=@status
where id=@id //更新tb_mergequeue的數據
end //結束(@status不等於3的條件循環
else if(@ttype=1) //如果 (@ttype=1 -- 頁面同步任務
begin開始
if (@status=3)
begin
insert into tb_queuelog([type],mid,code,otherparams,created)
select @ttype,mid,code,otherparams,created
from tb_syncqueue
where id=@id
delete from tb_syncqueue
where id=@id
end
else
update tb_syncqueue
set status=@status
where id=@id
end
select @@rowcount //取得記錄總數
end 結束存儲過程
❾ SQL 存儲過程里能用中間表或者臨時表嗎
一
建一個臨時表就是了
1. 存儲過程中 create table #Temp(……) ,然後Insert 數據
2. 存儲過程中 select * into #Temp from ……
這兩種模式都可以形成一個當前會話可見的臨時表,如果需要建全局可見的就使用##。操作起來跟普通表一樣。
二
SELECT CONVERT(varchar(10), GETDATE(), 111) AS dv
❿ sql語句怎麼生成可調用的中間表
中間表就是所謂的臨時表,sql通常有#和##兩種方法
例如:select * into #tbl from tablename
select * from #tbl --就可以調用了