I am passing a parameter (source_table_name) in procedure which actually a table_name.
Also, I am declaring a collection type and using source_table_name%rwtype instead of actual_table_name%rowtype.
Its throwing an error.

请建议是否有任何变通办法.

    CREATE OR REPLACE PROCEDURE PRM_BKUP_TRNSACTION_TABLE_PROC
    (
        source_table_name     IN VARCHAR2,
        archive_date_col      IN  VARCHAR2,
        archive_form_date     IN VARCHAR2,
        archive_to_date       IN VARCHAR2
    )
    
    AS
    --Collection

    TYPE source_table_collection IS TABLE OF source_table_name%ROWTYPE; <----(passing proc parameter)
    source_data source_table_collection;

推荐答案

您不能使用变量进行输入.类型必须在编译时而不是在执行时解析.在这种情况下,请使用动态SQL将编译推迟到执行时进行.将整个PL/SQL匿名块提交到EXECUTE IMMEDIATE,在该块的声明部分中您可以使用您需要的任何集合类型:

CREATE OR REPLACE PROCEDURE PRM_BKUP_TRNSACTION_TABLE_PROC
(
source_table_name                 IN VARCHAR2,
archive_date_col      IN  VARCHAR2,
archive_form_date          IN VARCHAR2,
archive_to_date            IN VARCHAR2

)

AS
BEGIN
  EXECUTE IMMEDIATE '
    DECLARE  
      TYPE source_table_collection IS TABLE OF '||source_table_name||'%ROWTYPE;
      source_data source_table_collection; 
      archive_date_col varchar2(128) := :archive_date_col;
      archive_form_date varchar2(30) := :archive_form_date;
      archive_to_date varchar2(30) := :archive_to_date;
    BEGIN
      NULL;
      -- do stuff
    END;
  ' USING IN archive_date_col,archive_form_date,archive_to_date;

END;

然而,听起来您正在构建一个归档系统来将数据从表移至其他地方.如果是这种情况,您可能需要考虑根本不使用PL/SQL集合.只需使用SQL将数据从一个表插入到另一个表,您就可以获得更好的性能并减少对内存的严格要求,PL/SQL仅用于管理操作,而不是处理数据本身.您仍然会结束需要动态SQL,但如果您放弃使用PL/SQL集合,则可以在没有更复杂的动态PL/SQL块的情况下编写此内容.

Sql相关问答推荐

如何将数组列和与Click house中的另一个数组列的元素分组

如何汇总组中的第一个值

如何用前一个非空值替换空值?

SQL Google Sheets:UNIQUE/DISTINCT和编码查询函数

Select /过滤postgr中的树 struct

获取每5分钟时间间隔的总和

使用SQL旋转表的列(Snowflake)

使用Mac日志(log)时间找出SQL中的好小时和坏小时

如何在SQL中更新Json字符串

如何从Spark SQL的JSON列中提取动态数量的键值对

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

在SELECT中将日期格式转换为双周时段

在SQL查询中查找客户端的最短日期比较列和多行

根据日期 Select ID 的上一条记录

使用 SQL 将列添加到 Access 数据库时出错

计算 ID 满足条件的次数

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

每个ID的SQL返回可能的最低级别及其值

PostgreSQL - 递归地聚合来自不同列的属性

面对来自以下两个代码的不同输出