Reputation: 7
This is my stored procedure and input is the partition name to be exchanged. However, the query cannot recognize my input name ('DATA_EXCHANGE_PAYLOAD_20160630') but this partition did exist in the database.
CREATE
OR REPLACE PROCEDURE exchange_partitions (partition_name IN VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE
'
ALTER TABLE BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD EXCHANGE PARTITION partition_name
WITH TABLE BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD_TEMP
';
END;
exec exchange_partitions('DATA_EXCHANGE_PAYLOAD_20160630');
Upvotes: 0
Views: 601
Reputation: 12169
EXECUTE IMMEDIATE 'ALTER TABLE BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD
EXCHANGE PARTITION :1 WITH TABLE
BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD_TEMP'
USING partition_name;
Upvotes: -1
Reputation: 36483
Your partition_name
parameter is not being used. The alter table
statement is literally looking for the string partition_name
. This is not what you want.
To fix it, concatenate the value of partition_name
into the dynamic SQL using the concatenation operator ||
:
CREATE OR REPLACE PROCEDURE exchange_partitions (partition_name IN VARCHAR2) AS
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD
EXCHANGE PARTITION ' || partition_name || ' WITH
TABLE BUCLM_ADAPTERDB.DATA_EXCHANGE_PAYLOAD_TEMP';
END;
Upvotes: 2