Create the PTF implementation package replicate_p.
CREATE PACKAGE replicate_p
AS
FUNCTION describe(tab IN OUT DBMS_TF.TABLE_T,
replication_factor NATURAL)
RETURN DBMS_TF.describe_t;
PROCEDURE fetch_rows(replication_factor NATURALN);
END replicate_p;
Create the PTF implementation package body replicate_p.
CREATE PACKAGE body replicate_p
AS
FUNCTION describe(tab IN OUT DBMS_TF.Table_t
, replication_factor NATURAL)
RETURN DBMS_TF.describe_t AS
BEGIN
RETURN DBMS_TF.describe_t(row_replication => True);
END;
PROCEDURE fetch_rows(replication_factor NATURALN)
AS
BEGIN
DBMS_TF.ROW_REPLICATION(replication_factor);
END;
END replicate_p;
Create a standalone PTF named replicate.
CREATE FUNCTION replicate(tab TABLE,
replication_factor NATURAL)
RETURN TABLE PIPELINED ROW POLYMORPHIC USING replicate_p;
This example sets the replication_factor to 2 which results in doubling the number of rows.
SELECT *
FROM replicate(scott.dept, replication_factor => 2)
DEPTNO | DNAME | LOC | 10 | ACCOUNTING | NEW YORK | 10 | ACCOUNTING | NEW YORK | 20 | RESEARCH | DALLAS | 20 | RESEARCH | DALLAS | 30 | SALES | CHICAGO | 30 | SALES | CHICAGO | 40 | OPERATIONS | BOSTON | 40 | OPERATIONS | BOSTON |
---|
Invoke the PTF replicate in a query.
SELECT *
FROM replicate(scott.dept, replication_factor => 0)
SELECT deptno, COUNT(*)
FROM replicate(scott.emp, 1e6)
GROUP BY deptno
DEPTNO | COUNT(*) | 30 | 6000000 | 10 | 3000000 | 20 | 5000000 |
---|
SELECT COUNT(*)
FROM replicate(dual, 1e9)
COUNT(*) | 1000000000 |
---|