我有一段代碼正在運行,它會調用postgresql,並且正在一系列模式中使用(在一個循環中)。這些模式除了可選地存在於模式中的1個表之外具有相同的佈局。如何在不知道表是否存在的情況下在「創建視圖」中執行計數
在代碼的一部分中,對該特定表的行進行了簡單計數。但是,由於此表格可能存在於模式中,因此可能不存在。在這種情況下,計數應返回0
當然,我可以把它分爲兩步:
(簡化代碼:)
1個首先檢查表是否存在
SELECT *
FROM information_schema.tables
WHERE table_schema = 'X'
AND table_name = 'import'
LIMIT 1;
2接下來如果存在表格,則爲該表格的計數製作次要呼叫。
Select count(*) as freq from X.import
如果該表不存在,只需返回0,不需要二次調用。
但是在這種情況下,代碼用於創建視圖。因此,調用將是這樣的:
CREATE OR REPLACE VIEW Y AS
WITH TABLES AS (SELECT table_schema||'.'||table_name FROM information_schema.tables)
SELECT CASE
WHEN 'X.import' in (SELECT * FROM TABLES)
THEN (SELECT count(*) FROM X.import)
ELSE 0
END
當然這個代碼將無法正常工作,因爲它不會除了使用X.import的THEN子句中,如果進口是沒有模式X.
的一部分有沒有辦法解決這個問題,或者我是否缺少一些其他簡單的解決方案?
'聲明@count爲int。如果@count> 0,則[ddl語句] Else Return'。或者類似的東西應該工作。使用動態SQL來解決可能的語法問題? –