Oracle - using bind variable in LIKE clause of dynamic cursor

后端 未结 2 1480
旧时难觅i
旧时难觅i 2021-01-05 12:44

I am using dynamic cursor for fetching data. Query that is being executed looks similar to:

query := \'SELECT column1, column2 
          FROM my_table 
             


        
相关标签:
2条回答
  • 2021-01-05 13:15

    This is a subtle one. It's often useful to start with a static statement, get that right, then convert it to dynamic SQL.

    In non-dynamic SQL we might do it like this:

     SELECT column1, column2 
     FROM my_table 
     WHERE column1 LIKE '%' || local_var || '%'; 
    

    The dynamic equivalent is

    query := 'SELECT column1, column2 
              FROM my_table 
              WHERE column1 LIKE ''%''||:bv1||''%'' ';
    
    0 讨论(0)
  • 2021-01-05 13:29

    Take the bind variable out of the string:

    VARIABLE mycursor REFCURSOR;
    VARIABLE bv1 VARCHAR2;
    
    BEGIN
      :bv1 := 'X'; -- set the bind variable
    END;
    /
    
    DECLARE
      query VARCHAR2(200) := 'SELECT * FROM DUAL WHERE DUMMY LIKE :value';
    BEGIN
      OPEN :mycursor FOR query USING '%' || :bv1 || '%';
    END;
    /
    
    PRINT mycursor;
    

    Output

    MYCURSOR
    --------
    DUMMY
    -----
    X
    
    0 讨论(0)
提交回复
热议问题