Sql 在创建过程中需要帮助吗
我有三张桌子,如下所示Sql 在创建过程中需要帮助吗,sql,oracle,plsql,oracle-sqldeveloper,plsqldeveloper,Sql,Oracle,Plsql,Oracle Sqldeveloper,Plsqldeveloper,我有三张桌子,如下所示 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, Ap
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包含所有表名、每个源表和目标表的列名以及where子句条件
在这里,我需要使用group by fact table、measures和where子句的列名,通过将事实表名称作为参数传递,将数据从t3插入到特定的事实表中
就像我们在过程中传递t1_事实表一样,我们必须从t2获取所有细节,从t3获取细节并插入t1_事实
我尝试了以下步骤,但无法将数据从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:
我已经检查了表名和所有参数,发现了错误
注意:上述过程是我现在正在创建的过程之一
请进一步帮助我
提前谢谢。我想您想要以下内容:
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 );
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.t3_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, t3_Where_Clause
FROM t2;
Begin
Open c1;
Loop
Fetch c1 Into tablename,destcolumns,destMeasures,whereClause;
Exit When c1%notfound;
q1 := 'INSERT INTO '||tablename||'('||destColumns||','||destMeasures||','||tablename||')'||
' ( SELECT '||sourceColumns||','||sourceMeasures||','||sourceTableName
||' FROM '||sourceTableName||' '||whereClause||
' GROUP BY '||sourceColumns||')';
Execute Immediate q1;
End Loop;
Close c1;
End;
sourceColumns t2.t3 columns%类型代码>和源度量t2.t3度量%类型代码>无效。语法应该是表名.columnname%type
。你可以用一个普通的方法来简化整个过程,而不是打开和获取单独声明的变量等等。谢谢!我对您建议的代码做了一些更改,现在可以将批量数据插入表中。