小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

EXECUTE STATEMENT語句的用法(譯)

 diamond 2007-09-13
 EXECUTE STATEMENT語句的用法(譯)
以下是筆者根據(jù)FB1.5文檔譯過來的.
EXECUTE STATEMENT語句是一個動態(tài)執(zhí)行的sql語句的語句,用在存儲過程與觸發(fā)器中.他相當(dāng)于MS SQLSERVER中的exec 語句,不過他比該語句用法豐富,在ms sql中如要實現(xiàn)后面兩種EXECUTE STATEMENT語句的功能,必須用exec +游標(biāo)來實現(xiàn).他有三種典型的用法.
第一種:語法如下:EXECUTE STATEMENT <string>;
<string>就指是sql語句.
樣例如下:
CREATE PROCEDURE DynamicSampleOne (Pname VARCHAR(100))
AS
DECLARE VARIABLE Sql VARCHAR(1024);--定義字符型變量,長度1024
DECLARE VARIABLE Par INTEGER;--定義整形變量Par
BEGIN
SELECT MIN(SomeField) FROM SomeTable INTO :Par;--把Sometalbe中somefied最小值的列---賦給par
Sql = ’EXECUTE PROCEDURE ’ || Pname || ’(’;
Sql = Sql || CAST(Par AS VARCHAR(20)) || ’)’;
EXECUTE STATEMENT Sql;--把存儲過程名當(dāng)參數(shù)來動態(tài)執(zhí)行
END

第二種,語法如下:
EXECUTE STATEMENT <string> INTO :var1, […, :varn] ;
舉個例子,我自已寫的一個過程用的:
CREATE PROCEDURE FIN_FUN0021 (
  TABLENAME VARCHAR(20))--傳入表名
RETURNS (
  NEWKEY BIGINT)--返回這個表的主K的最新值(我建的表所有的主K都有整形)
AS
DECLARE VARIABLE BASNUM INTEGER;
DECLARE VARIABLE CURRSHOPID INTEGER;
DECLARE VARIABLE STRMK VARCHAR(50);
DECLARE VARIABLE NEWMAXKEY BIGINT;
DECLARE VARIABLE STRSQL VARCHAR(250);
BEGIN
 execute procedure FIN_FUN0026('BASNUM') Returning_values (BASNUM);--增長的步長
 execute procedure FIN_FUN0026('SHOPID') Returning_values (CurrShopID); --分店號
 
/*得到傳來的表格的主K名*/
 select first 1 A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B
   WHERE B.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
   AND UPPER(B.RDB$RELATION_NAME) = UPPER(:TableName)
   AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME
  ORDER BY A.RDB$FIELD_POSITION into :STRMK;
  if (STRMK IS NOT NULL) then -- 為防止沒有主K的情形出現(xiàn)。
 BEGIN
    STRMK=uf_trim(STRMK);--uf_trim為主定義函數(shù),相當(dāng)于delphi的trim
  /*得到當(dāng)前主K的最大值 */
  STRSQL='SELECT CAST(MAX(' ||STRMK|| ')' ||' AS bigint) from ' ||TableName ;
  execute STATEMENT STRSQL INTO :NewMaxKey ;

  if(NewMaxKey is NULL) then --如果主K是空值
  begin
   NEWKEY = CURRSHOPID;
  end
  else --不是空的.
   NEWKEY = NewMaxkey+BASNUM;
 END
  SUSPEND;
END
第三種形式:語法:
FOR EXECUTE STATEMENT <string> INTO :var1, …, :varn DO
<compound-statement>;
例子:
/*傳入表與廣本字段,得到該表中該字段的所有數(shù)據(jù)*/
CREATE PROCEDURE DynamicSampleThree (
TextField VARCHAR(100),
TableName VARCHAR(100))
RETURNS (Line VARCHAR(32000))
AS
DECLARE VARIABLE OneLine VARCHAR(100);
BEGIN
Line = ’’;
FOR EXECUTE STATEMENT
’SELECT ’ || TextField || ’ FROM ’ || TableName INTO :OneLine
DO
IF (OneLine IS NOT NULL) THEN
Line = Line || OneLine || ’ ’;
SUSPEND;
END

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多