У меня есть три таблицы, как показано ниже.
Create table t1_Fact
(
Cur_date Date,
Name varchar2(10),
Event varchar2(50),
Price Number(10,0),
TAX Number(10,0),
Flag Number
);
Create table App_Fact
(
Application_ID Number,
Application_Name varchar2(100),
Application_Price Number,
Appliation_Tax Number,
Flag Number
);
Create table t2
(
Table Name Varchar2(100),
Table_Columns Varchar(100),
Table_Measure varchar2(100),
t3 columns varchar2(100),
t3 measures varchar2(100),
t3_Where_Clause varchar2(100)
);
Create table t3
(
Cur_date Date,
Name varchar2(10),
Event varchar2(50),
Application_ID Number,
Application_Name varchar2(100),
Application_Price Number,
Appliation_Tax Number,
Price Number(10,0),
TAX Number(10,0)
Flag Number,
);
T2 table data:
Таблица T2 детали
таблица t2 содержит все имена таблиц, имена столбцов каждой исходной и целевой таблиц и условия условия where.
Здесь мне нужно вставить данные из t3 в конкретную таблицу фактов, используя group по именам столбцов таблицы фактов, меры и предложение where, передав имя таблицы фактов в качестве параметра.
Как если бы мы передавали таблицу t1_Fact в процедуре, мы должны получить все детали из t2, получить детали из t3 и вставить в t1_Fact.
Я пробовал следующую процедуру, однако я не могу вставить данные в таблицу фактов из t3.
Процедура:
enter code here
**create or replace PROCEDURE CommonProcedure(sourceTableName IN VARCHAR2)
IS
tablename t2.Table_Name%TYPE;
destcolumns t2.Table_Columns%TYPE;
destMeasures t2.Table_Measure%TYPE;
whereClause t2.Table_Where_Clause%TYPE;
sourceColumns t2.t3 columns%TYPE;
sourceMeasures t2.t3 measures%TYPE;
q1 VARCHAR2(3000 BYTE);
CURSOR C1 is
SELECT Table_Name, Table_Columns, Table_Measure, Table_Where_Clause
--into reportName,procedureName,destinationTableName
from t2
BEGIN
open c1;
loop
fetch c1 into tablename,destcolumns,destMeasures,whereClause;
exit when c1%notfound;
q1 := 'INSERT INTO ||tablename||"("||destColumns||","||destMeasures||","||Table_Name)"||
" (select "||sourceColumns||","||sourceMeasures||","||sourceTableName||" FROM "||sourceTableName||" "||whereClause||
" GROUP BY "||sourceColumns||")';
EXECUTE IMMEDIATE q1;
end loop;
close c1;
End;
Когда я компилирую вышеописанную процедуру, получаю следующую ошибку.
Error starting at line : 3 in command -
BEGIN CommonProcedure('MIS_CDR_01_01',1); END;
Error report -
ORA-00903: invalid table name
ORA-06512: at "AMTEL_MIS.PROCESSCDRCOMMONPROCEDURE", line 35
ORA-06512: at line 1
00903. 00000 - "invalid table name"
*Cause:
*Action:
Я проверил имена таблиц и все параметры, получающие ошибку.
Примечание: Вышеприведенная процедура является примером одной из тех процедур, которые я создаю прямо сейчас.
Пожалуйста, помогите мне дальше.
Заранее спасибо.