具有多变量表的Oracle过程

具有多变量表的Oracle过程,oracle,plsql,Oracle,Plsql,我正在学习一些关于pl/sql的知识,当我正在编写一个过程时,我想如果可以这样做: create or replace procedure lCProcedure(c_tables in varchar, cl_cursor OUT SYS_REFCURSOR) is begin open cl_cursor for select * from c_tables; end lCProcedure; 然后我会这样做: create or replace procedure

我正在学习一些关于pl/sql的知识,当我正在编写一个过程时,我想如果可以这样做:

create or replace procedure lCProcedure(c_tables in varchar, cl_cursor OUT SYS_REFCURSOR)
is
begin
    open cl_cursor for
        select * from c_tables;
end lCProcedure;
然后我会这样做:

create or replace procedure lCProcedure(c_tables in varchar, cl_cursor OUT SYS_REFCURSOR)
is
begin
    open cl_cursor for
        select * from c_tables;
end lCProcedure;
例: LCP程序(客户,cur); LCP程序(存储、cur);

每个人都提供了我要的那张桌子的所有信息。有可能吗?你能吗?你可以

create or replace procedure lCProcedure(
  c_table in varchar2, 
  cl_cursor OUT SYS_REFCURSOR
)
is
begin
    -- Don't do this!!
    open cl_cursor for
        'select * from ' || c_tables;
end lCProcedure;

你应该吗?几乎可以肯定不是。动态SQL是一个非常强大的工具,但它相对容易被滥用。由于只有一个存储过程可以查询任何表,因此无法通过正常授权使用manage security。它消除了为应用程序提供定义的API的好处,这些API可以在数据模型发展时保持一致。同样,它通过强制调用方知道底层数据模型中的所有表,消除了过程API应该提供的封装好处。如果你像我在这里做的那样构建一个幼稚的实现,你就会受到SQL注入攻击。

你的过程有两个参数。在您的通话过程中(客户);立法会程序(储存)您只通过了一个!这只是一个例子,我目前在C#中做这件事,我的问题是:我可以用一个变量来代替我要查询的“表”,以便对不同的表使用相同的过程。非常感谢。我知道我不应该这样做,但这只是为了满足我的好奇心。我想知道这一点,因为我需要创建一个程序来完成同样的事情,我认为当我可以一次完成所有的事情时,这是一个巨大的资源浪费。再次非常感谢。