Tôi đang cố chạy nhiều câu lệnh ddl trong một câu lệnh Execute Immediate. tôi nghĩ rằng điều này sẽ được khá thẳng về phía trước nhưng có vẻ như tôi là nhầm lẫn.ORACLE Batching các câu lệnh DDL trong một Execute ngay lập tức
Ý tưởng là thế này:
declare v_cnt number;
begin
select count(*) into v_cnt from all_tables where table_name='TABLE1' and owner = 'AMS';
if v_cnt = 0 then
execute immediate 'CREATE TABLE TABLE1(VALUE VARCHAR2(50) NOT NULL) ALTER TABLE TABLE1 ADD (MYVAL2 NVARCHAR2(10))';
end if;
end;
tuy nhiên kết quả này trong một lỗi
ORA-00.911: nhân vật không hợp lệ ORA-06.512: tại dòng 10
Mỗi các câu lệnh trong hàng loạt chạy tốt nếu tôi thực hiện chúng một mình. và nếu tôi lấy tuyên bố này và thực hiện nó, nó sẽ chạy tốt (với, giữa 2 câu lệnh). Nếu tôi loại bỏ; giữa các câu lệnh tôi nhận được lỗi khác về tùy chọn không hợp lệ
kế hoạch là tôi sẽ có thể tạo bảng, xuất lược đồ bảng cho bảng này bao gồm tất cả các câu lệnh thay đổi và sau đó chạy lô đối với một hệ thống khác một phần của quá trình cài đặt/cập nhật.
Vì vậy, làm cách nào để tôi xử lý các câu lệnh DDL này trong một lần thực thi ngay lập tức? Hay là có cách nào tốt hơn để làm những gì tôi cần?
Tôi là một bit của một newb Oracle, tôi phải thừa nhận. Cảm ơn tất cả các bạn vì sự kiên nhẫn của bạn.
việc tạo và sửa đổi bảng được xuất dưới dạng một tệp và ngay bây giờ, có đủ các giá trị đó gây khó khăn khi cố gắng thực hiện nó trong 1 IMMEDIATE EXECUTE và nhiều đối tượng db. – Beta033
Trong trường hợp đó, tôi đề nghị chỉ cần tạo DDL chính xác ngay từ đầu. Nhìn vào DBMS_METADATA. :-) – cagcowboy
có vẻ như điều này có thể khắc phục được sự cố của tôi. buồn bã câu trả lời rõ ràng là ngay dưới mũi tôi. Bài học kinh nghiệm: Không sử dụng TOAD để cấu trúc đầu ra mặc dù có một menu gui ưa thích cho nó. – Beta033