How do I declare and use variables in PL/SQL like I do in T-SQL?

后端 未结 3 1341
醉酒成梦
醉酒成梦 2020-12-15 17:06

In Sql Server, often times when I\'m testing the body of a stored procedure, I copy the body into SSMS, DECLARE the variables at the top of the page, set them to some sample

相关标签:
3条回答
  • 2020-12-15 17:16

    Revised Answer

    If you're not calling this code from another program, an option is to skip PL/SQL and do it strictly in SQL using bind variables:

    var myname varchar2(20);
    
    exec :myname := 'Tom';
    
    SELECT *
    FROM   Customers
    WHERE  Name = :myname;
    

    In many tools (such as Toad and SQL Developer), omitting the var and exec statements will cause the program to prompt you for the value.


    Original Answer

    A big difference between T-SQL and PL/SQL is that Oracle doesn't let you implicitly return the result of a query. The result always has to be explicitly returned in some fashion. The simplest way is to use DBMS_OUTPUT (roughly equivalent to print) to output the variable:

    DECLARE
       myname varchar2(20);
    BEGIN
         myname := 'Tom';
    
         dbms_output.print_line(myname);
    END;
    

    This isn't terribly helpful if you're trying to return a result set, however. In that case, you'll either want to return a collection or a refcursor. However, using either of those solutions would require wrapping your code in a function or procedure and running the function/procedure from something that's capable of consuming the results. A function that worked in this way might look something like this:

    CREATE FUNCTION my_function (myname in varchar2)
         my_refcursor out sys_refcursor
    BEGIN
         open my_refcursor for
         SELECT *
         FROM   Customers
         WHERE  Name = myname;
    
         return my_refcursor;
    END my_function;
    
    0 讨论(0)
  • 2020-12-15 17:35

    Variables are not defined, but declared.

    This is possible duplicate of declare variables in a pl/sql block

    But you can look here :

    http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#i27306

    http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/overview.htm

    UPDATE:

    Refer here : How to return a resultset / cursor from a Oracle PL/SQL anonymous block that executes Dynamic SQL?

    0 讨论(0)
  • 2020-12-15 17:36

    In Oracle PL/SQL, if you are running a query that may return multiple rows, you need a cursor to iterate over the results. The simplest way is with a for loop, e.g.:

    declare
      myname varchar2(20) := 'tom';
    begin
      for result_cursor in (select * from mytable where first_name = myname) loop
        dbms_output.put_line(result_cursor.first_name);
        dbms_output.put_line(result_cursor.other_field);
      end loop;
    end;
    

    If you have a query that returns exactly one row, then you can use the select...into... syntax, e.g.:

    declare 
      myname varchar2(20);
    begin
      select first_name into myname 
        from mytable 
        where person_id = 123;
    end;
    
    0 讨论(0)
提交回复
热议问题