我有一个动态获取表名和列名的要求,我需要获取数据并使用批量收集在表中插入/更新。据我检查,我将无法对使用动态表/列名称的动态SQL使用FORALL。请提出任何解决方法,以将数据批量插入集合中
Declare
Type Type_xx is table of varchar2(200);
Lv_Coll type_xx:=type_xx();
Lv_Coll2 sys_refcursor;
Lv_tab varchar2(200):='C_Sample_1';
Lv_Col Varchar2(200):='SHORT_NAME';
Out_tab Varchar2(200):='Test';
Begin
OPEN Lv_Coll2 FOR 'Select '||Lv_Col||' from '||Lv_tab||'';
Loop
Fetch Lv_Coll2 bulk collect into Lv_Coll limit 100;
Exit when Lv_Coll.count < 100;
forall i in Lv_Coll.first..Lv_Coll.last
Execute Immediate 'insert into '||Out_tab||' values ('||Lv_Coll(i)||')';
End loop;
end;
出现错误
ORA-06550:第16行,第17列:
PLS-00801:内部错误[*** ASSERT 在文件pdw4.c,行620;未知表达式Expr = 283。 Xanon__0x2b21bbdd8__AB [16,17]]
数据库版本为11.2.0.4.0
答案 0 :(得分:1)
可能不是首选的解决方案,但是您可以将整个批量插入PL / SQL块放在EXECUTE IMMEDIATE语句中。
答案 1 :(得分:0)
这是一种实现方法:
from Django.shortcuts import render
import openpyxl
from .models import FileFieldForm
def index(request):
if "GET" == request.method:
return render(request, 'well/index.html', {})
else:
FileFieldForm = request.FILES["excel_file"]
# you may put validations here to check extension or file size
wb = openpyxl.load_workbook(FileFieldForm)
# getting all sheets
worksheet = wb.sheetnames
print(worksheet)
excel_data = list()
# iterating over the rows and
# getting value from each cell in row
for sheet_name in wb.sheetnames:
worksheet = wb[sheet_name]
for row in worksheet.iter_rows():
row_data = list()
for cell in row:
row_data.append(str(cell.value))
excel_data.append(row_data)
return render(request, 'well/index.html', {"excel_data": excel_data})
我还没有完成提交。