如何在查询中使用声明的变量

时间:2018-10-24 12:05:38

标签: oracle plsql

我想获取特定分区中的记录数。
返回的值将在以后的流程中使用。

DECLARE  
  pt VARCHAR2(20);
  countr NUMBER;
BEGIN
  pt:='61';
   DBMS_OUTPUT.PUT_LINE(pt);

 SELECT COUNT(*) INTO countr FROM T1 PARTITION ( pt) ;

END;

但是遇到错误,它不会用分配的值替换'pt'。

1 个答案:

答案 0 :(得分:1)

您不能使用变量在静态SQL中指定对象名称(表,列,分区等)。

您需要使用动态SQL,例如分区名称不带引号的

DECLARE  
  pt all_tab_partitions.partition_name%TYPE;
  countr NUMBER;
BEGIN
  pt:='p61';
  DBMS_OUTPUT.PUT_LINE(pt);

  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM T1 PARTITION (' || pt || ')'
  INTO countr ;
END;
/

如果您使用分区名称的引号引起来,则需要在语句中包括引号,并确保分区名称的大小写完全匹配:

DECLARE  
  pt all_tab_partitions.partition_name%TYPE;
  countr NUMBER;
BEGIN
  pt:='61';
  DBMS_OUTPUT.PUT_LINE(pt);

  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM T1 PARTITION ("' || pt || '")'
  INTO countr ;
END;
/