簡體   English   中英

如何檢查SQL Anywhere中是否存在臨時表?

[英]How do I check if a temporary table exists in SQL Anywhere?

我想編寫一個SQL IF語句來檢查是否存在本地臨時表,但這些表不會記錄在SQL Anywhere系統目錄中。

請注意,您可以在11.0.1及更高版本中執行此操作:

DROP TABLE IF EXISTS t;

如果你問這個問題,“如果不存在錯誤,如何刪除本地臨時表?” 然后答案很簡單:只需DROP它並忽略任何錯誤:

BEGIN
   DROP TABLE t;
   EXCEPTION WHEN OTHERS THEN
END;

如果你真的需要知道問題的答案“表格是否存在?” 您可以查詢表並分析生成的SQLSTATE。 以下功能使用了以下幾個功能:

  • ON EXCEPTION RESUME忽略SELECT引發的任何異常並將控制權傳遞給IF語句。

  • EXECUTE IMMEDIATE允許您編寫一個查詢,其中表名在字符串變量中。

  • TOP 1確保即使表包含一百萬行,也只選擇一行。

  • ORDER BY 1允許您滿足TOP只能在訂購結果集時使用的要求。

  • SELECT 1減輕了指定列名的負擔。

  • INTO @dummy表示SELECT(因此EXECUTE IMMEDIATE)不返回結果集。

如果SELECT工作,它要么將SQLSTATE設置為'00000'表示成功,要么將'02000'設置為未找到行。 任何其他SQLSTATE意味着表有一些嚴重的問題......就像它不存在一樣。

CREATE FUNCTION f_table_is_ok
   ( IN @table_name VARCHAR ( 128 ) )
   RETURNS INTEGER
   ON EXCEPTION RESUME
BEGIN
   DECLARE @dummy INTEGER;
   EXECUTE IMMEDIATE STRING (
      'SELECT TOP 1 1 INTO @dummy FROM ',
      @table_name,
      ' ORDER BY 1' );
   IF SQLSTATE IN ( '00000', '02000' ) THEN
      RETURN 1
   ELSE
      RETURN 0
   END IF;
END;

這是一些測試代碼:

BEGIN
DECLARE LOCAL TEMPORARY TABLE tt ( c INTEGER );
DECLARE LOCAL TEMPORARY TABLE "t t" ( c INTEGER );
SELECT f_table_is_ok ( 'asdf' );
SELECT f_table_is_ok ( 'tt' );
SELECT f_table_is_ok ( '"t t"' );
SELECT f_table_is_ok ( '"SYS"."SYSTABLE"' );
END; 

只是嘗試放棄它並忽略錯誤......

開始
DROP TABLE表;
除此之外的例外情況

結束;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM