我想获取特定分区中的记录数。
返回的值将在以后的流程中使用。
DECLARE
pt VARCHAR2(20);
countr NUMBER;
BEGIN
pt:='61';
DBMS_OUTPUT.PUT_LINE(pt);
SELECT COUNT(*) INTO countr FROM T1 PARTITION ( pt) ;
END;
但是遇到错误,它不会用分配的值替换'pt'。
答案 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;
/