我想編寫一個SQL IF語句來檢查是否存在本地臨時表,但這些類型的表不記錄在SQL Anywhere系統目錄中。如何檢查SQL Anywhere中是否存在臨時表?
3
A
回答
1
只是嘗試反正砸而忽略了錯誤...
BEGIN
DROP TABLE表;
例外當然其他
END;
3
如果您提出這樣的問題,「如果在不存在錯誤的情況下拋出一個本地臨時表,該如何拋出錯誤?」那麼答案很簡單:剛落,而忽略任何錯誤:
BEGIN
DROP TABLE t;
EXCEPTION WHEN OTHERS THEN
END;
如果你真的需要知道問題的答案「是否表t存在嗎?」您可以查詢表並分析生成的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;
5
注意,您可以在11.0.1做到這一點,更高:
DROP TABLE IF EXISTS t;
相關問題
- 1. 檢查臨時表是否存在
- 2. 檢查是否存在臨時表
- 3. 如何檢查數據庫中是否存在臨時表
- 4. 檢查臨時表中是否存在列總是在SQL Server中返回false
- 5. SQL Anywhere的11 - 檢查是否存在事件
- 6. SQL Server,無法檢查是否存在臨時表,存在if語句
- 7. 檢查SQL表中是否存在值
- 8. 檢查python中是否存在sql表
- 9. 如何檢測Postgres臨時表是否已存在?
- 10. 如何檢查SQL Server中是否存在表的列表?
- 11. Openquery SQL如何檢查是否存在?
- 12. 檢查是否存在表的SQL Server
- 13. 檢查表是否存在SQL
- 14. 檢查SQL表是否存在
- 15. Microsoft SQL Server 2005檢查臨時表是否空
- 16. SQL案例當聲明檢查字段是否在臨時表中時
- 17. 如何檢查sql表中是否存在一條記錄?
- 18. 一種方法來檢查,如果臨時表存在與否
- 19. 如何檢查表是否存在
- 20. 如何檢查Cassandra表是否存在
- 21. 如何檢查DynamoDB表是否存在?
- 22. 如何檢查表mysql.proc是否存在
- 23. 如何檢查目錄是否是Python中的臨時目錄
- 24. 檢查SQL中是否存在子集
- 25. 如何檢查SQL Azure中是否存在存儲過程?
- 26. 檢查表是否存在
- 27. 檢查表是否存在
- 28. 檢查表是否存在
- 29. 如何檢查SQL子查詢中是否存在字段?
- 30. VBA-獲取字段名稱並檢查它們是否存在臨時表中