Tạo DDL Bảng với Thực thi ngay lập tức
Có hai cách viết truy vấn Tạo bảng DDL cho câu lệnh Thực thi ngay lập tức của SQL động nguyên bản trong Cơ sở dữ liệu Oracle. Chúng tôi đã thảo luận về một trong số chúng trong hướng dẫn cuối cùng. Cách đầu tiên mà chúng ta đã thảo luận trong hướng dẫn trước có lẽ là cách dễ nhất để viết một truy vấn SQL cho SQL động. Nhưng điều đó không ngăn chúng tôi học hỏi thêm. Vì vậy, hãy tiếp tục và tìm hiểu điều thứ hai.
Vì vậy, trong hướng dẫn này, chúng ta sẽ tìm hiểu phương pháp thứ hai để viết một DDL TẠO BẢNG để thực thi động bằng cách sử dụng câu lệnh thực thi ngay lập tức.
Vì hướng dẫn này tiếp nối với hướng dẫn trước nên tôi yêu cầu bạn vui lòng xem qua blog đó trước để hiểu rõ hơn. Điều đó đang được nói, hãy bắt đầu hướng dẫn.
Bước 1:Chuẩn bị DDL TẠO BẢNG.
Chuẩn bị trước truy vấn SQL mà bạn muốn thực thi động. Điều này sẽ giảm sự nhầm lẫn mã và cũng giảm thiểu lỗi cú pháp.
CREATE TABLE tut_83 ( tut_num NUMBER(5), tut_name VARCHAR2 (50), CONSTRAINT cons1_col1_pid_pk PRIMARY KEY (tut_num) )
Đây là DDL TẠO BẢNG CỦA chúng tôi. Ngoại trừ tên đã thay đổi và một ràng buộc khóa chính được thêm vào, DDL này khá giống với cái mà chúng tôi đã tạo trong hướng dẫn trước.
Bước 2:Viết Khối PL / SQL để Thực thi Động câu lệnh DDL.
Bây giờ chúng ta đã chuẩn bị TẠO BẢNG DDL. Hãy viết chương trình PL / SQL để thực thi nó động.
SET SERVEROUTPUT ON; DECLARE ddl_qry VARCHAR2(150); BEGIN ddl_qry := 'CREATE TABLE tut_83('|| 'tut_num NUMBER(3),'|| 'tut_name VARCHAR2(50)'|| ')'; EXECUTE IMMEDIATE ddl_qry; END; /
Hãy xem chúng tôi đã làm gì trong chương trình này.
Phần khai báo .
DECLARE ddl_qry VARCHAR2 (150);
Trong phần khai báo của khối PL / SQL, chúng tôi đã khai báo một biến có tên ddl_qry. Biến này sẽ giữ DDL CREATE TABLE của chúng tôi mà chúng tôi sẽ chạy bằng cách sử dụng câu lệnh Thực thi ngay lập tức.
Theo hướng dẫn cuối cùng, Thực thi ngay lập tức xử lý tất cả các câu lệnh SQL dưới dạng một chuỗi kiểu dữ liệu VARCHAR2. Đó là lý do tại sao chúng tôi đã khai báo biến ddl_qry của mình là kiểu dữ liệu VARCHAR2.
Phần Thực thi.
Ngay sau phần khai báo, chúng ta có phần thực thi, nơi tất cả những điều thú vị đang diễn ra.
BEGIN ddl_qry := 'CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')'; EXECUTE IMMEDIATE ddl_qry; END; /
Phần thực thi này chỉ bao gồm hai câu lệnh:
- Tuyên bố công việc
- Thực hiện câu lệnh ngay lập tức
Câu lệnh đầu tiên là "Assignment Statement" làm cho mã này khác với mã trước đó. Hãy xem những tuyên bố này là gì.
Tuyên bố 1:Tuyên bố nhiệm vụ.
ddl_qry := 'CREATE TABLE tut_83 ('|| 'tut_num NUMBER (5),'|| 'tut_name VARCHAR2 (50),'|| 'CONSTRAINT cons1_col1_pk PRIMARY KEY (tut_num)'|| ')';
Đây là câu lệnh duy nhất làm cho chương trình PL / SQL này khác với câu lệnh mà chúng ta đã thấy trong hướng dẫn trước.
Trong câu lệnh này, chúng ta đang gán DDL CREATE TABLE cho biến ddl_qry. Vậy khác biệt ở đây là gì?
Trong phương pháp trước, chúng tôi đã đặt toàn bộ câu lệnh DDL của chúng tôi thành một cặp Dấu ngoặc kép (‘’). Như thế này
ddl_qry:= 'CREATE TABLE tut_82 ( tut_num NUMBER(3), tut_name VARCHAR2 (50) )';
Cách đầu tiên để viết một truy vấn DDL
Trong khi ở đây trong phương pháp thứ hai thay vì gói toàn bộ truy vấn thành các dấu nháy đơn, đầu tiên chúng ta chia nó thành nhiều chuỗi VARCHAR2. Điều này chúng tôi đã làm bằng cách gói mọi dòng truy vấn thành các dấu ngoặc kép. Sau đó, chúng tôi kết hợp tất cả chúng bằng cách sử dụng toán tử nối (||) để công cụ PL / SQL sẽ thực thi chúng như một đơn vị duy nhất.
Bạn có thể xem phần minh họa chi tiết về cách tiếp cận phá vỡ và chinh phục này để thực thi động trong hướng dẫn bằng video.
Bài đọc được đề xuất:Hàm Concat Vs Toán tử Concat.
Tuyên bố 2:Thực thi Tuyên bố ngay lập tức.
Câu lệnh thứ hai của chúng tôi là câu lệnh Execute ngay lập tức. Nó thực thi bất kỳ câu lệnh SQL nào trả về một hàng kết quả động. Trong trường hợp của chúng ta, câu lệnh này đang thực hiện truy vấn CREATE TABLE DDL thông qua một khối PL / SQL.
Chỉ có hai cách để thực thi một câu lệnh DDL thông qua một khối PL / SQL trong Cơ sở dữ liệu Oracle. Bằng cách sử dụng gói DBMS_SQL hoặc Thực thi ngay lập tức của SQL động gốc. Đọc ở đây để biết bạn có thể làm gì khác bằng cách sử dụng Thực thi ngay lập tức.
Để thực thi động một DDL, trước tiên bạn phải viết cụm từ dành riêng 'Thực thi ngay lập tức'. Tiếp theo là tên biến mà bạn đã lưu trữ DDL của mình như chúng tôi đã làm ở trên.
Kiểm tra xem bảng đã được tạo hay chưa.
Có nhiều cách để kiểm tra xem khối PL / SQL có thực thi DDL TẠO BẢNG THÀNH CÔNG hay không. Nhưng ở đây tôi sẽ chỉ cho bạn hai cách dễ nhất và phổ biến.
Sử dụng lệnh DESCRIBE
Cách dễ nhất để kiểm tra xem khối PL / SQL đã tạo bảng tut_83 thành công hay chưa, là sử dụng Lệnh DESCRIBE. Lệnh mô tả hiển thị cấu trúc của bảng được đề cập, chỉ khi nó tồn tại, nếu không, nó sẽ trả về lỗi.
Hãy thử điều đó
DESCRIBE tut_83; Or DESC tut_83
Nếu khi thực hiện lệnh mô tả ở trên, bạn thấy cấu trúc của bảng tut_83 thì điều đó có nghĩa là khối PL / SQL ở trên đã tạo bảng thành công. Nhưng trong trường hợp nếu bạn gặp lỗi có nghĩa là bạn đã nhầm lẫn ở đâu đó và việc thực thi khối PL / SQL không thành công.
Sử dụng từ điển dữ liệu ALL_OBJECTS.
Bạn cũng có thể truy vấn từ điển dữ liệu ALL_OBJECTS. Điều này giúp tìm hiểu xem bảng mong muốn hoặc bất kỳ đối tượng nào khác mà bạn đang cố gắng tạo có được tạo hay không. Như thế này
SELECT 'We created a table with name '||object_name||' in ' ||owner||' schema on '||created FROM all_objects WHERE object_name ='TUT_83';
Đây là hai trong số nhiều cách để tìm hiểu xem đối tượng mong muốn có được tạo thành công hay không.
Một điều nữa trước khi kết thúc hướng dẫn này. Vui lòng đọc blog trước để hiểu rõ hơn về điều này cũng như các hướng dẫn sắp tới.
Đó là hướng dẫn PL / SQL về cách thứ hai để viết một DDL TẠO BẢNG để thực thi ngay lập tức câu lệnh SQL động nguyên bản trong Cơ sở dữ liệu Oracle.
Hy vọng bạn thích đọc. Hãy nhớ đăng ký kênh YouTube. Bởi vì trong hướng dẫn tiếp theo, chúng ta sẽ học cách thả và sửa đổi động các đối tượng lược đồ.
Cảm ơn và chúc một ngày tốt lành!