CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN xử lý hàng loạt sql động này được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
1. KHAI BÁO KIỂU ref_cursor_type LÀ ref CURSOR; v_mycursor ref_cursor_type; KIỂU id_list LÀ BẢNG CỦA số nguyên; KIỂU name_list LÀ BẢNG CỦA varchar2(30); v_tabid id_list:=id_list(); v_tabname name_list:=name_list(); sql_str varchar2(200); BEGIN -- Bây giờ hãy bắt đầu, hãy nhập sql_str:='select empno,ename from emp'; sql_str:=sql_str||' order by empno desc'; thực thi ngay lập tức sql_str BULK COLLECT INTO v_tabid,v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); KẾT THÚC VÒNG ĐẶT; dbms_output.put_line('---------------------------------'); --更新(返回更新后的值) sql_str:='update emp set empno=1+empno,ename=''a'' trong đó rownum=1 TRẢ empno,ename thành :1,:2 '; thực hiện ngay lập tức sql_str TRẢ LẠI BULK THU THẬP VÀO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); KẾT THÚC VÒNG ĐẶT; dbms_output.put_line('---------------------------------'); --删除(返回被删除的行) sql_str:='xóa khỏi emp nơi rownum<=2 TRẢ empno,ename thành :1,:2 '; thực hiện ngay lập tức sql_str TRẢ LẠI BULK THU THẬP VÀO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); KẾT THÚC VÒNG ĐẶT; dbms_output.put_line('---------------------------------'); --插入(返回插入的行) sql_str:='chèn vào giá trị emp(empno,ename)(1,''abc'') TRẢ empno,ename vào :1,:2 '; thực hiện ngay lập tức sql_str TRẢ LẠI BULK THU THẬP VÀO v_tabid, v_tabname; FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' Nhập TÊN'||v_tabname(c)); END LOOP; dbms_output.put_line('---------------------'); /* Lệnh lấy: lấy dynamic_cursor thu thập hàng loạt vào define_variable[,define_variable...] */ sql_str:='select empno,ename from emp'; sql_str:=sql_str||' order by empno desc'; OPEN v_mycursor FOR sql_str; -- Mở FETCH v_mycursor THU THẬP HÀNG LOẠT VÀO v_tabid,v_tabname; -- Mở CLOSE v_mycursor; --输 FOR c IN v_tabid.first..v_tabid.last LOOP dbms_output.put_line('empno为'||v_tabid(c)||' 记录的NAME为'||v_tabname(c)); KẾT THÚC VÒNG ĐẶT; dbms_output.put_line('---------------------------------'); KẾT THÚC; 2.------- forall DECLARE /*Hướng dẫn sử dụng: Sử dụng chuỗi ký tự đầu vào để chèn/cập nhật/xóa, thay vì chọn forall index ở lower..upper thực thi chuỗi động ngay lập tức bằng cách sử dụng bind |bind(index)[,bind |bind(index)...] [{returning|return} thu thập số lượng lớn vào bind_argument[,bind_argument...]]; */ TYPE sal_list IS TABLE OF number(8,2); TYPE name_list IS TABLE OF varchar2(30); TYPE dept_list IS VARRAY(15) OF integer; v_depts dept_list:=dept_list(10,20,30,40,50,60,70,80); v_tabsal sal_list:=sal_list(); v_tabname name_list:=name_list(); sql_str varchar2(200); BẮT ĐẦU sql_str:='cập nhật emp đặt sal=sal*:arg1 trong đó DEPTNO=:arg2'; sql_str:=sql_str||' trả về ename,sal vào :arg3,:arg4'; --Tăng lương cho bốn phòng ban đầu tiên 10% và trả kết quả về tập hợp. 1. .4 thực thi sql_str ngay lập tức bằng cách sử dụng 1.10,v_depts(j) RETURNING BULK COLLECT INTO v_tabname,v_tabsal; --Hiển thị kết quả CHO j IN v_tabname.first..v_tabname.last LOOP dbms_output.put_line('Employee'||v_tabname(j) ||' lương đã được đề cập'||v_tabsal(j)); dbms_output.put_line('---------------------------------'); --Tăng lương cho bốn bộ phận sau 20% và trả kết quả về bộ sưu tập. FORALL j IN 5..8 thực thi sql_str ngay lập tức bằng cách sử dụng 1.20,v_depts(j) RETURNING BULK COLLECT INTO v_tabname,v_tabsal; (sử dụng notfound Xác định xem có tập kết quả hay không) IF SQL%NOTFOUND THEN dbms_output.put_line('Không có dữ liệu nào được cập nhật'); ELSE CHO j IN v_tabname.first..v_tabname.last LOOP dbms_output.put_line('Employee'||v_tabname(j) ||' lương đã được đề cập'||v_tabsal(j)); Sử dụng liên kết giá trị để liên kết một giá trị có cùng tên. Điều này có thể đạt được bằng cách đặt câu lệnh sql ở đầu cuối, ví dụ: thực thi ngay lập tức. 'begin calc_stats(:x,:x,:y,:x,:y); end;' sử dụng a,b; Liên kết A với X. Khi một tên khác xuất hiện lần thứ hai, hãy liên kết nó với B với And sớm.
Cuối cùng, bài viết về batch Dynamic sql kết thúc tại đây. Nếu bạn muốn biết thêm về batch Dynamic sql, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!