我正在尝试编写一个SQL语句来检查表是否存在,如果存在,则将其放入System i中。
我认为这将是一个简单的IF EXISTS
声明,但我遇到了麻烦并且不确定如何继续。
声明全文:
IF EXISTS (SELECT TABLE_NAME FROM <<DatabaseName>>.VIEWS
WHERE TABLE_NAME = 'TABLE')
DROP VIEW <<DatabaseName>>.TABLE
GO
它返回错误
关键字IF不期望
我是System i的初学者,但我已经读过程序可以解决这个问题吗?
答案 0 :(得分:2)
您可以在存储过程中使用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;
然后,您可以在表名,模式和列定义中调用此proc传递:
CALL CREATE_TABLE('MYTABLE', 'MYSCHEMA', '(
COL1 INTEGER NOT NULL,
COL2 VARCHAR(100))';
我实际上没有对此进行测试,但这应该可以让您基本了解自己需要做什么。