อัปเดตแล้ว
Rad-คน!
TL;DR
ต้องการโค้ดที่ใช้งานได้เพื่อวนซ้ำรายการที่มีอยู่ของตารางทั้งหมดของฉัน ซึ่งจะสร้างไฟล์ CSV โดยเลือก 100 แถวบนสุดของแต่ละตาราง มีตัวแปรที่ตั้งค่าไว้เพื่อจับชื่อตารางที่จะใช้แบบไดนามิก เรียกตารางเพื่อเลือกและตั้งชื่อไฟล์ ต้องทำผ่าน PLSQL และ SQLDeveloper คุณรู้จักดาแวไหม?
นี่คือสถานการณ์:
- ต้องรวบรวมตารางทั้งหมด (ตารางฐานไม่ใช่ตารางชั่วคราว) และจำนวนแถว (จำนวนแถว>0)
- สร้างวงวนเพื่อเลือก(*) 100 แถวบนสุดจากรายการตาราง
- นำผลลัพธ์ของการสืบค้นมาวางไว้ในไฟล์ CSV
ปัญหา:
- การประกาศตัวแปร
- การใช้เริ่มต้นและสิ้นสุด
- การใช้ชื่อไดนามิกเพื่อสร้างไฟล์ CSV ที่ไม่ซ้ำใคร
นี่คือรหัสของฉัน:
CREATE GLOBAL TEMPORARY TABLE NameRow (nom VARCHAR2(100), rowc INTEGER)
on commit delete ROWS;
insert into NameRow(nom, rowc) select table_name, num_rows from user_tables where temporary = 'N' and num_rows > 0;
--select * from namerow;
--select count(nom) from namerow;
--drop table namerow;
--no need for the row count > 0 because that was already done above
declare
counter number := 0;
totalrecords number := 0;
nmbre varchar2(100);
BEGIN
Select count(nom) into totalrecords from namerow;
WHILE counter <= totalrecords LOOP
select nom into nmbre from NameRow where rownum =1;
SET SPOOL ON
SPOOL c:\Users\l.r.enchaustegui\Documents\reporepo\||nmbre||.csv
select /*csv*/ * from HR.nmbre;
SET SPOOL OFF
delete from namerow where rownum=1;
counter := counter + 1;
End loop;
END;
รหัสอธิบาย:
- ตารางชั่วคราวถูกสร้างขึ้นด้วยคอลัมน์ varchare และจำนวนเต็มเพื่อบันทึกตารางทั้งหมดใน DB ด้วย RowCount
- ชื่อตารางที่แทรกในตารางชั่วคราวต้องไม่ใช่ชื่อชั่วคราวและมีจำนวนแถวมากกว่า 0
ส่วนถัดไป
- ประกาศตัวแปร 3 ตัว คือ จำนวนเต็ม 2 ตัว และ varchar 1 ตัว
- 2 จำนวนเต็ม: 1 เป็นตัวนับสำหรับการวนซ้ำ 1 บันทึกแถวทั้งหมดในตาราง Temp ซึ่งจะทำหน้าที่เป็นการวนซ้ำสูงสุดในลูป
- Varchar: Nmbre จะบันทึกชื่อของชื่อตารางที่ 1 ภายในตารางชั่วคราว
ส่วนถัดไป
- เก็บพักในพาธต่อไปนี้ โดยใช้ตัวแปร Nmbre เพื่อตั้งชื่อไฟล์ CSV แบบไดนามิก
- Spool Query โดยใช้ตัวแปร Nmbre เพื่อเลือกตารางแบบไดนามิก
- ลบแถวที่ 1 ออกจากตารางชั่วคราว [ทำหน้าที่หมุนเป็นชื่อตารางถัดไป]
- สปูลปิด
- วนซ้ำ
- สิ้นสุดวง; จบ;
ฉันผิดตรงไหน? นอกจากนี้ ฉันได้รับข้อผิดพลาดนี้:
รอบโบนัส: จำกัดเฉพาะนักพัฒนา SQL