Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EXECUTE IMMEDIATE with multiple lines of columns to insert

just want to get an idea if this is the correct way to do an EXECUTE IMMEDIATE with multiple columns and lines and assigning it to a variable? I tried looking at examples but am not sure if I am concatenating the lines correctly?

sql_stmt        VARCHAR2(200);

sql_stmt:='INSERT INTO (STORECODE, TILLID, TRANSACTIONNR, TRADINGDATE, TRANSTYPE, ' ||
          'OPERATORCODE TRAININGMODE, VOIDED, VALUEGROSS, VALUENETT, VALUEDUE) ' ||
          ‘VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10)’;
          EXECUTE IMMEDIATE sql_stmt USING sSTORECODE………………………………………..fGROSS_AMOUNT,
      ‘0’;   
like image 530
user1941350 Avatar asked Dec 12 '22 18:12

user1941350


2 Answers

A string can be multi-line in Oracle. As such, you could simply write:

sql_stmt := 'INSERT INTO (STORECODE, TILLID, TRANSACTIONNR, TRADINGDATE, 
                          TRANSTYPE, OPERATORCODE TRAININGMODE, VOIDED, 
                          VALUEGROSS, VALUENETT, VALUEDUE) 
                  VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10)';

EXECUTE IMMEDIATE sql_stmt USING p1, p2... p10;

Using concatenation (||) and several substrings would work as well of course.

like image 65
Vincent Malgrat Avatar answered Dec 28 '22 23:12

Vincent Malgrat


set serveroutput on size unlimited;

declare
str_   varchar(1000 char);
date_ date;


begin
  --str_ := 'select sysdate' || chr(10);
  --str_ := str_ || 'from dual';
  str_ := 'select sysdate /* ''comment'' */
           from dual';

  execute immediate str_
  into date_;

  dbms_output.put_line(date_);


end;
like image 29
Néstor Waldyd Avatar answered Dec 28 '22 22:12

Néstor Waldyd