我想要创建一个过程,但是当我编译这些过程时总是有一个错误,我认为这个过程是对的,什么是错的。这是我的程序:
create or replace PROCEDURE "DROP_PART_USER"
AS
H VARCHAR(50);
BEGIN
FOR cc IN
(
select PARTITION_NAME INTO H FROM all_tab_partitions
WHERE table_name = 'MOB_TRACK_USER' AND partition_name <> 'OLD_DATA_USER' ORDER BY PARTITION_POSITION ASC
FETCH NEXT 1 ROWS ONLY
) LOOP
--drop partitions older than specified retention preriod
EXECUTE IMMEDIATE 'ALTER TABLE ' || 'APP_MOBILE_TRACKING' ||'.'||'MOB_TRACK_USER '
|| ' DROP PARTITION ' || cc.partition_name || ' UPDATE GLOBAL INDEXES';
END LOOP;
END;得到一个错误(8,3):PL/ SQL : ORA-00933: SQL命令未正确结束
发布于 2020-04-02 12:49:43
你在哪种版本的甲骨文?第一次等在12c出现了。如果您在11上,那么该语法将无法工作,您将得到您声明的错误。您的查询必须是:
select * from (
SELECT PARTITION_NAME
FROM all_tab_partitions
WHERE table_name = 'MOB_TRACK_USER'
AND partition_name <> 'OLD_DATA_USER'
ORDER BY PARTITION_POSITION ASC
)
where rownum = 1发布于 2020-04-02 12:45:46
problems
SELECT INTO
还有几个注意事项:
VARCHAR2,而不是VARCHAR VARCHAR2
中不使用双引号
应该是
CREATE OR REPLACE PROCEDURE drop_part_user
AS
BEGIN
FOR cc IN ( SELECT PARTITION_NAME
FROM all_tab_partitions
WHERE table_name = 'MOB_TRACK_USER'
AND partition_name <> 'OLD_DATA_USER'
ORDER BY PARTITION_POSITION ASC
FETCH NEXT 1 ROWS ONLY)
LOOP
--drop partitions older than specified retention preriod
EXECUTE IMMEDIATE
'ALTER TABLE '
|| 'APP_MOBILE_TRACKING'
|| '.'
|| 'MOB_TRACK_USER '
|| ' DROP PARTITION '
|| cc.partition_name
|| ' UPDATE GLOBAL INDEXES';
END LOOP;
END;https://stackoverflow.com/questions/60991539
复制相似问题