Проверьте, существует ли таблица в System i, а затем удалите ее
Я пытаюсь написать оператор SQL, который проверит, существует ли таблица, и, если это так, удаляет ее в System i.
Я предполагал, что это будет просто IF EXISTS
заявление, но у меня возникли проблемы с ним и не знаете, как поступить.
Утверждение в полном объеме:
IF EXISTS (SELECT TABLE_NAME FROM <<DatabaseName>>.VIEWS
WHERE TABLE_NAME = 'TABLE')
DROP VIEW <<DatabaseName>>.TABLE
GO
Возвращается с ошибкой
Ключевое слово ЕСЛИ не ожидается
Я - новичок в System i, но я читал о том, как это обойти?
1 ответ
Вы можете использовать оператор IF внутри хранимой процедуры, так что вы можете сделать это с помощью чего-то вроде:
CREATE PROCEDURE CREATE_TABLE (
IN IN_TABLE_NAME VARCHAR(128),
IN IN_TABLE_SCHEMA VARCHAR(128),
IN IN_TABLE_DEF VARCHAR(4000))
LANGUAGE SQL MODIFIES SQL DATA
DECLARE CNT INT DEFAULT 0;
DECLARE STMT VARCHAR(1000);
SELECT COUNT(*) INTO CNT
FROM QSYS2/SYSTABLES
WHERE TABLE_NAME = IN_TABLE_NAME and TABLE_SCHEMA = IN_TABLE_SCHEMA
CASE CNT
WHEN 1 THEN
SET TABLE_NAME = 'CORPDATA.DEPT_' CONCAT P_DEPT CONCAT '_T';
SET STMT = 'DROP TABLE ' || IN_TABLE_SCHEMA || '/' || IN_TABLE_NAME;
PREPARE S1 FROM STMT;
EXECUTE S1;
END CASE
SET STMT = 'CREATE TABLE ' || IN_TABLE_SCHEMA || '/' || IN_TABLE_NAME ||
IN_TABLE_DEF;
PREPARE S1 FROM STMT;
EXECUTE S1;
Затем вы можете вызвать эту процедуру, передав имя таблицы, схему и определение столбца:
CALL CREATE_TABLE('MYTABLE', 'MYSCHEMA', '(
COL1 INTEGER NOT NULL,
COL2 VARCHAR(100))';
Я на самом деле не проверял это, но это должно дать вам базовое представление о том, что вам нужно делать.