You can perform dynamic queries using EXECUTE IMMEDIATE or OPEN FOR in GaussDB(DWS). EXECUTE IMMEDIATE dynamically executes SELECT statements and OPEN FOR combines use of cursors. If you need to store query results in a data set, use OPEN FOR.
Figure 1 shows the syntax diagram.
Figure 2 shows the syntax diagram for using_clause.
The above syntax diagram is explained as follows:
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | --Retrieve values from dynamic statements (INTO clause). DECLARE staff_count VARCHAR2(20); BEGIN EXECUTE IMMEDIATE 'select count(*) from staffs' INTO staff_count; dbms_output.put_line(staff_count); END; / --Pass and retrieve values (the INTO clause is used before the USING clause). CREATE OR REPLACE PROCEDURE dynamic_proc AS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2); BEGIN EXECUTE IMMEDIATE 'select first_name, salary from staffs where staff_id = :1' INTO first_name, salary USING IN staff_id; dbms_output.put_line(first_name || ' ' || salary); END; / -- Invoke the stored procedure. CALL dynamic_proc(); -- Delete the stored procedure. DROP PROCEDURE dynamic_proc; |
Dynamic query statements can be executed by using OPEN FOR to open dynamic cursors.
For details about the syntax, see Figure 3.
Parameter description:
For use of cursors, see Cursors.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | DECLARE name VARCHAR2(20); phone_number VARCHAR2(20); salary NUMBER(8,2); sqlstr VARCHAR2(1024); TYPE app_ref_cur_type IS REF CURSOR; -- Define the cursor type. my_cur app_ref_cur_type; -- Define the cursor variable. BEGIN sqlstr := 'select first_name,phone_number,salary from staffs where section_id = :1'; OPEN my_cur FOR sqlstr USING '30'; -- Open the cursor. using is optional. FETCH my_cur INTO name, phone_number, salary; -- Retrieve the data. WHILE my_cur%FOUND LOOP dbms_output.put_line(name||'#'||phone_number||'#'||salary); FETCH my_cur INTO name, phone_number, salary; END LOOP; CLOSE my_cur; -- Close the cursor. END; / |