建议你看看Pl/SQL 程序设计
我也是刚刚从T-SQL转过来的。

解决方案 »

  1.   

    CREATE PROCEDURE sp_table_records 
    (
        table_name in VARCHAR2  --变量有in/ out/ in out 
       )
    AS 
        sql  VARCHAR2(500);
    BEGIN
        sql := ' SELECT * FROM ' || table_name;
    --
    --或者
    /*
    select concat(sql,' SELECT * FROM ') from dual;
    select concat(sql,table_name) from dual;
    */
        --这里要调用包来执行SQL了吧。
    END sp_table_records;
      

  2.   

    --这里要调用包来执行SQL了吧。大侠能不能说详细些?我对oracle一无所知,现在项目紧,看书可能也来不及了
      

  3.   

    pl/sql怎么返回数据集?
    CREATE OR REPLACE PACKAGE pkg_test
    AS
       TYPE myrctype IS REF CURSOR;   PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
    END pkg_test;
    /CREATE OR REPLACE PACKAGE BODY pkg_test
    AS
       PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
       IS
          sqlstr   VARCHAR2 (500);
       BEGIN
          IF p_id = 0 THEN
             OPEN p_rc FOR
                SELECT ID, NAME, sex, address, postcode, birthday
                  FROM student;
          ELSE
             sqlstr :=
                'select id,name,sex,address,postcode,birthday
               from student where id=:w_id';
             OPEN p_rc FOR sqlstr USING p_id;
          END IF;
       END get;
    END pkg_test;
    /
      

  4.   

    可以用 
    v_sql varchar2(100);
    v_sql := ...;
    execute immediate v_sql; --这样v_sql 就能执行了。
    --还可以用into 了句
    execute immediate v_sql into 变量名 来得到执行结果。
      

  5.   

    8i以上的版本可以在PL/SQL中可使用execute immediate 来执行动态SQL.
    CREATE PROCEDURE sp_table_records(table_name in VARCHAR2) 
    AS 
        sqlstr  VARCHAR(500)
    BEGIN
        sqlstr:= ' SELECT * FROM ' + table_name;    execute immediate sqlstr;
    END;
      

  6.   

    执行动态 sql 参考楼上的做法,但是楼上atao245993(阿涛)网友的程序就算编译过了也做不了任何事情,如果想返回查询结果,参照 LGQDUCKY(飘) 网友的做法.
      

  7.   

    多谢各位,结帐了。我用别的方法实现了。看来以后有时间要看看PL/SQL的书