Mã của bạn hầu hết đều tốt, nhưng bạn sẽ phải sửa đổi nó như thế này:
DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0 then
BEGIN
select count(*) into l_count_2 FROM dba_tab_cols WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';
IF l_count_2 > 0 THEN
sql_cnt := 'INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES (''value1'', ''select max(column) from table_2'', ''20'')';
ELSE
sql_cnt := 'INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES (''value1'', ''select max(column) from table_2'')';
END IF;
BEGIN
EXECUTE IMMEDIATE sql_cnt ;
END;
END;
END IF;
END;
hoặc như thế này:
DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0 then
BEGIN
select count(*) into l_count_2 FROM dba_tab_cols WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';
IF l_count_2 > 0 THEN
INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES ('value1', 'select max(column) from table_2', '20' );
ELSE
INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES ('value1', 'select max(column) from table_2');
END IF;
END;
END IF;
END;
Tùy chọn đầu tiên là sử dụng đúng chính tả Oracle cho các sáng tạo chuỗi và SQL động và tùy chọn thứ hai là tránh hoàn toàn SQL động bằng cách thực thi INSERT
tại chỗ (tùy chọn tôi thích hơn).
CHỈNH SỬA: Lỗi bạn gặp phải là do bạn không đóng gói INSERT
của mình bên trong một chuỗi. Đó là những gì tôi đã thay đổi cho bạn trong tùy chọn đầu tiên của tôi khi tôi đề cập đến correct Oracle spelling for string creations and dynamic SQL
.
Tôi hy vọng tôi đã giúp!