आपका कोड ज्यादातर अच्छा है, लेकिन आपको इसे या तो इस तरह संशोधित करना होगा:
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;
या इस तरह:
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;
पहला विकल्प स्ट्रिंग क्रिएशन और डायनेमिक SQL के लिए सही Oracle स्पेलिंग का उपयोग कर रहा है और दूसरा विकल्प INSERT
को क्रियान्वित करके डायनेमिक SQL को पूरी तरह से टालना है। मौके पर (वह विकल्प जो मुझे पसंद है)।
संपादित करें: आपको त्रुटि इसलिए मिली क्योंकि आपने अपने INSERT
. को इनकैप्सुलेट नहीं किया था एक स्ट्रिंग के अंदर। जब मैंने correct Oracle spelling for string creations and dynamic SQL
का उल्लेख किया, तो मैंने अपने पहले विकल्प में आपके लिए यही बदल दिया। ।
मुझे आशा है कि मैंने मदद की!