我想检查要创建的所有int((record[2])[8:10]),int((record[2])[10:13]), float(record[6]), float(record[7]),
ValueError: could not convert string to float:
是否都存在。如果它们已经存在,我们需要先放弃它们。
这是我创建的逻辑,这是我第一次table_name
使用CONCAT
。
此处的错误是CASE WHEN
无法读取CONCAT
。
还有其他方法可以检查表名是否存在?或者有没有办法继续这个逻辑,并建议解决这个问题?
CASE WHEN
答案 0 :(得分:0)
使用IF..THEN..ELSE代替
此外,substr(to_char(sysdate,'ddmonyy'),3,5)
= to_char(sysdate,'monyy')
SET SERVEROUTPUT ON;
DECLARE
v_drop_table VARCHAR2(50);
v_go int := 0;
BEGIN
FOR rec IN
(
SELECT lower(table_name) as table_name
FROM user_tables
WHERE LOWER(table_name) LIKE 'mpiat_after_bs_%'
)
LOOP
v_go: = 0;
IF rec.table_name = 'mpiat_after_bs_' || to_char(sysdate,'monyy') || '_t'
THEN
v_drop_table := 'DROP TABLE ' || rec.table_name;
v_go: = 1;
ELSEIF rec.table_name = 'mpiat_after_bs_ebi_' || to_char(sysdate,'monyy') || '_t'
THEN
v_drop_table := 'DROP TABLE ' || rec.table_name;
v_go: = 1;
END IF;
IF v_go = 1
THEN
DBMS_OUTPUT.PUT_LINE(v_drop_table);
EXECUTE IMMEDIATE v_drop_table;
END IF;
END LOOP;
END;
注意你们中的任何一个常规回答者都会发现拼写错误,请随时纠正我
答案 1 :(得分:0)
在FOR rec IN
之后的SELECT部分使用以下内容SELECT LOWER(table_name) AS table_name