当前位置: 首页 > 面试题库 >

在PL / SQL过程中,如何将表名作为参数传递?

白烨煜
2023-03-14
问题内容
CREATE PROCEDURE A(tab IN <table - what should I write here?>) AS
BEGIN
   INSERT INTO tab VALUES(123);
END A;

如何指定参数tab为表名?


问题答案:

你不能 相反,您需要将其作为VARCHAR2字符串传递,然后使用动态SQL:

CREATE PROCEDURE A(tab IN VARCHAR2) AS
BEGIN
   EXECUTE IMMEDIATE 'INSERT INTO ' || tab || 'VALUES(123)';
END A;

阅读有关Dynamic
SQL的信息,
并注意如果不正确地使用它会带来的问题,例如性能,可伸缩性和安全性较差。



 类似资料:
  • 问题内容: 我有一个存储过程,它将列名和表名作为参数。 此过程给我一个错误: 必须声明标量变量@TableName 尽管我已经在顶部声明了它。 问题答案: 使用动态SQL:

  • 问题内容: 我有大约六种通用但相当复杂的存储过程和函数,我想以一种更通用的方式使用它们。 理想情况下,我希望能够将表名作为参数传递给过程,因为当前它是硬编码的。 我所做的研究表明,我需要将过程中所有现有的SQL转换为使用动态SQL,以便从参数中拼接动态表名称,但是我想知道是否还有一种更简便的方法可以通过另一种方式引用该表? 例如: 如果是这样,如何从表名设置@MyTable变量? 我正在使用SQL

  • 问题内容: 例如,这不起作用: 产生: 但是,这按预期工作: 在select语句中使用参数作为表名需要什么语法?这有可能吗? 问题答案: 准备好的语句是您所需要的。

  • 我在Oracle数据库中有一个过程,其中有一个数组作为输出参数。在这个过程中,我将所有球队及其得分放入一个数组中。 但是当我尝试用PHP调用这个过程时,我总是会遇到这样的错误: PLS-00306:调用RETRIEVE_RANKING的参数的数量或类型错误 这是我的PHP代码的一部分: 如果我将OUT参数更改为VARCHAR2进行测试,我可以读取结果。但是如果它是一个数组,我就无法使其工作。 所以

  • 问题内容: 我正在使用一个存储过程,在其中发送数据库中其类型为的存储过程,并且还声明parameter 。 当我将列名传递为float时,它给出了错误: 消息8114,将数据类型nvarchar转换为float时出错。 这是我的测试查询 当我将参数类型更改为时,它给了我这个错误: 消息8117,操作数数据类型varchar对avg运算符无效。 我该如何解决? 更新 : 这是我的存储过程: 问题答案

  • 问题内容: 我有一个存储过程,可以根据两个表选择一个数据列表。第一张表是固定的:。但是第二个表可以是多个表之一。表本身的名称是相同的:。但是,表的架构不同: 用户将从应用程序中选择模式,然后将所选模式作为参数传递给存储过程。 但是,当我在创建存储过程时解析存储过程时,会出现错误。 无论如何,有没有要传递架构名称作为参数? 问题答案: 使用DynamicSql 这样尝试