Синтаксис: PL SQL IDE: PL/SQL DeveloperАвтоматизировать Создать процедуру таблицы с помощью динамического SQL с помощью курсора или цикл - PLSQL
Я пытаюсь генерировать 4 таблицы для каждого региона с использованием ряда кодов региона.
Я понимаю, что может быть более эффективным создание одной таблицы со всеми включенными областями и усечением и заменой этой таблицы, однако на основе структуры, необходимой для использования. Мне не разрешено это делать.
4 регионов приходят из определенной таблицы
SELECT DISTINCT REGION
FROM REGION_TABLE
;
Каков наилучший способ для создания этой серии таблиц динамически?
Я попытался использовать курсор и цикл, но я не уверен в том, что метод интегрирует этот курсор в следующую процедуру.
DECLARE
CURSOR C_REGION IS
SELECT DISTINCT REGION FROM REGION_TABLE ;
BEGIN
FOR L_IDX IN C_REGION
LOOP
DBMS_OUTPUT.PUTLINE(L_IDX.C_REGION);
END LOOP;
END;
Используя значение курсора выше, как я могу идти о вставке этих значений в не только имя таблицы, используемом в Создании таблицы части заявления Sql, но в качестве параметра в ИНЕКЕ
-- 4 REGIONS - NORTH SOUTH EAST WEST,
CREATE OR REPLACE PROCEDURE SALES_ORDER_TBL_PROC
(
REGION IN VARCHAR2
, RETURNCODE OUT NUMBER
, ERROR_MESSAGE OUT VARCHAR2
)
IS
TABLE_NAME VARCHAR2(30);
SQL_STR VARCHAR2;
REGION_VAR VARCHAR;
BEGIN
TABLE_NAME := 'SALES_COUNT_'||REGION_VAR;
SQL_STR := 'CREATE TABLE '||TABLE_NAME||
' AS
(
SELECT
REGION
, COUNT(DISTINCT MEMBER_ID) AS NUM_MBR
FROM INCREMENTAL_SALES_TBL
WHERE 1=1
AND REGION = '||REGION_VAR||
'GROUP BY REGION)'
;
EXECUTE IMMEDIATE SQL_STR ;
RETURNCODE := 0;
EXCEPTION WHEN OTHERS THEN
RETURNCODE := SQLCODE;
ERROR_MESSAGE :='ERR:Creating/Altering table '||TABLE_NAME ||'-'||SQLERRM;
END;
/
BEGIN
SALES_ORDER_TBL_PROC;
END;
Создание таблиц похоже на одноразовую работу. зачем вам нужна процедура? – GurV
Это таблицы отчетов. - Процедура компании просто необходима для их перестройки на лету. – BGDev
лучше обрезать и загрузить данные за – GurV