Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

You are not connected. Please login or register

Chuyển đến trang : 1, 2  Next

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 2 trang]

winternight

winternight

Thành Viên
ĐỒ ÁN
NHÓM 3 – PHẦN HÀM (FUNCTION)

Xin các bạn thuộc nhóm 3 chú ý nha…..
Sau khi đọc tài liệu và tham khảo ý kiến của Thầy, thì mình xin có những thay đổi vè số câu hỏi mà từng người phải làm, lý do là có nhiều câu trong 25 thủ tục chúng ta không cần phải làm….
Cụ thể danh sách như sau :

0866029 Lê Hoàng Dũng [Câu 10, 12… ]
0866120 Trần Quang Sơn [Câu 11, 24]
0866045 Nguyễn Quang Hóa Câu [19, 20]
0866174 Chế Minh Tuấn [16, 18]
0866104 Nguyễn Trần Diễm Phúc [3, 4]
0866037 Huỳnh Thị Kim Hằng [13]
0866023 Lương Văn Doanh [1, 2]
0866040 Đỗ Thị Thu Hiền [5]
0866146 Trần Khoa Thư [6, 7]
0866153 Nguyễn Thị Lê Thủy [25]
0866183 Nguyễn Văn Việt [15, 17]
0866135 Đinh Ngọc Thảo [8]

Trên đây là danh sách các bạn nhóm 3 đã đăng ký tham gia đồ án của Nhóm…
Những bạn không có tên trong danh sách trên, nếu muốn tham gia hoạt động cùng nhóm, thì liên hệ với ME để nhận bài làm nha…Rất vui vì sự cộng tác của tất cả mọi người...

Ngay bậy giờ chúng ta hãy bắt tay vào công việc ngay, để thứ 2 tuần sau tất cả cùng nộp lại, xem xét và hoàn thiện đồ án nha các bạn….

Vì các câu hỏi gần nhau thì nội dung gần như tương tự nhau, nên nếu bạn nào có thời gian thì hy vọng chúng ta cứ làm tiếp những câu mình có thể làm để cùng nhau sửa chữa cho tốt nha…Điều này có nghĩa, ngoài các câu đã được phân công, các bạn được quyền làm thêm những câu khác…

Chúc mọi người hoàn thành tốt đồ án…..
Xin chân thành cám ơn các bạn….

NHÓM TRƯỞNG
Lê Hoàng Dũng - 0866029

winternight

winternight

Thành Viên
DANH SACH LIEN HE :






0866029 Lê Hoàng Dũng [01667452142]


0866120 Trần Quang Sơn [0987588500]


0866045 Nguyễn Quang Hóa [01689976147]


0866174 Chế Minh Tuấn


0866104 Nguyễn Trần Diễm Phúc [0903884390]


0866037 Huỳnh Thị Kim Hằng


0866023 Lương Văn Doanh


0866040 Đỗ Thị Thu Hiền [0952188798]


0866146 Trần Khoa Thư [0977157569]


0866153 Nguyễn Thị Lê Thủy


0866183 Nguyễn Văn Việt [01674559867]


0866135 Đinh Ngọc Thảo [01674559831]

winternight

winternight

Thành Viên
Các bạn nhóm 3 chú ý nha....Thứ 2 chúng ta sẽ gom bài lại nha, hạn chót là thứ 3 nha các bạn...

boy_saudoi

boy_saudoi

Thành Viên
Tài liệu thầy cho hoàn toàn không nói gì đến function return table chắc phải search. Ai có tài liệu function return table thì post lên nha Rat ngau

winternight

winternight

Thành Viên
OK

winternight

winternight

Thành Viên
Các bạn vào đây xem cú pháp nha : [You must be registered and logged in to see this link.]

winternight

winternight

Thành Viên


Tạo hàm (Function) trong Oracle







Hàm (Function) bao gồm một loạt các câu lệnh, có thể không có,
có một hoặc nhiều tham số. Tuy nhiên khác với thủ tục, hàm bao giờ cũng
trả về một kết quả. Vì vậy, ta sử dụng hàm trong các phép tính toán, gán
giá trị
.


Ta có thể tạo hàm
bằng dòng lệnh sau:

Cú pháp:

CREATE [OR
REPLACE] FUNCTION function_name [(argument1 [mode1]
datatype1,
argument2 [mode2] datatype2, ...)]

RETURN datatype
IS | AS
[Khai báo các biến
cục bộ];
BEGIN
[Các lệnh thi hành];
EXCEPTION
[Lệnh điều khiển lỗi];
END;

Với:
function_name Tên hàm
argument Tên tham số
mode Loại tham số
datatype Kiểu dữ liệu của
tham số



Ví dụ:
SQL> CREATE OR REPLACE FUNCTION
fn_sal (emp_id NUMBER) RETURN REAL IS

acct_sal REAL;[You must be registered and logged in to see this image.]
BEGIN[You must be registered and logged in to see this image.]
SELECT sal * 1.2 INTO acct_sal
FROM emp[You must be registered and logged in to see this image.]

WHERE empno = emp_id;[You must be registered and logged in to see this image.]
RETURN acct_sal;[You must be registered and logged in to see this image.]
END fn_sal;[You must be registered and logged in to see this image.]
/


Thi hành hàm vừa tạo
Cách 1:
SQL> VARIABLE v_salary NUMBER[You must be registered and logged in to see this image.]
SQL> EXECUTE :v_salary Ko hiểu fn_sal(7876)[You must be registered and logged in to see this image.]
SQL> PRINT v_salary


Cách 2:

SQL> EXECUTE
dbms_output.put_line(fn_sal(100))



Cách 3:

SQL> SELECT
empno, ename, fn_sal(empno) salary

from emp;


























[You must be registered and logged in to see this link.]

winternight

winternight

Thành Viên
[You must be registered and logged in to see this link.]

winternight

winternight

Thành Viên
Bạn nào trong chạy được một đoạn function nào thì post lên cho mọi người cùng tham khảo nha..

boy_saudoi

boy_saudoi

Thành Viên
Đã chay thanh cong vài câu return table nhưng vấn đề là không có dữ liệu để test Sợ lắm

winternight

winternight

Thành Viên
Bạn copy mấy function vào đi để làm ví dụ cho mọi người nha...Thanks nhiều...

_AL_INOX_

_AL_INOX_

Thành Viên
không hiểu lắm về cái này! Khoc coi miệt mài mà hok hỉu đc bao nhiu! Khoc Khoc

lean202008

lean202008

Thành Viên
Tài liệu phần thủ tục. Câu 13 bị sai nhưng An chưa sửa lại. Để tối gởi nốt cho các bạn.

[You must be registered and logged in to see this link.]

lean202008

lean202008

Thành Viên
AN lam cau 17 mau cho cac ban tham khao nha. Chay ko bi loi gi. Chi co dieu la ko co insert de kiem tra thoi. Nhung no bo la chay dung. Xin loi may bi loi nen ko danh tieng Viet co dau dc.

CREATE OR REPLACE
FUNCTION CAU17
(iDSanPham in chitiethoadon.idsanpham%type)
RETURN NUMBER
AS
tongGTHoaDon hoadon.tonggt%type;
BEGIN
select sum(hd.tonggt) into tongGTHoaDon
from hoadon hd, chitiethoadon cthd
where hd.soseries = cthd.soseries and cthd.idhoadon = hd.id and cthd.idsanpham=idsanpham;
RETURN tongGTHoaDon;
END CAU17;

boy_saudoi

boy_saudoi

Thành Viên
Thực sự thì function khác procedure là chỉ có thể truyền vào tham trị.
Mà tôi làm tham số truyền vào không liên quan gì đến
database như bạn An chỉ là khai báo biến và kiểu thôi
Code:

Câu 24
//Khai bao object
create or replace type h as object
(
  loaiphanhoi char(1);
  ThongKe float
);

//Khai bao table can tra ve
create or replace type m as table of h;

//Bat Dau Function
create or replace function cau_24
return m
as
    md m:=m();
    cursor cur is select t.loaiphanhoi,((count(*)*1.0/(select count(*) from THONGTINPHANHOI))*100)as ThongKe 
                from THONGTINPHANHOI t
                group by t.loaiphanhoi;
    Loai char(1);
    TK float;
begin
    open cur;
    loop
      fetch cur into Loai,TK;
        md.extend;
        md(md.Last):=n(Loai,TK);
    exit when cur %notfound;
    end loop;
    close cur;
    return md;
end;
Câu 10:
Code:

create or replace
function son_10(idnv char)
RETURN int
as
  kq int;
  begin
    select sum(ngaygiodkketthuc-ngaygiodkbatdau) into kq
    from chitiethoatdong join nhanvienhoatdong  on chitiethoatdong.idhoatdong=nhanvienhoatdong.idhoatdong
    where nhanvienhoatdong.idnhanvien=idnv;
    return kq;
end;

letter_tran

letter_tran

Thành Viên
HÀM
Tương tự như thủ tục, hàm (function) cũng là nhóm các lệnh PL/SQL thực hiện chức năng nào đó. Khác với thủ tục, các hàm sẽ trả về một giá trị ngay tại lời gọi của nó.
Hàm cũng có thể được lưu giữ ngay trên database dưới dạng Store procedure.

Tạo hàm
Ta có thể tạo hàm trực tiếp bằng dòng lệnh sau: Cú pháp:
CREATE [OR REPLACE] FUNCTION TenHam (ten_tham_so1 [IN hoặc OUT hoặc IN OUT] [kiểu dữ liệu], ten_tham_so2 [IN hoặc OUT hoặc IN OUT] [kiểu dữ liệu]...)
RETURN [kiểu dữ liệu]
IS hoặc AS
BEGIN
[Nội dung khối lệnh SQL và PL/SQL];
END;
 CREATE OR RELACE là nếu hàm chưa được tạo thì nó sẽ tạo hàm. Còn hàm đã được tạo rồi thì nó sẽ chỉnh sửa (ALTER) lại hàm đó.
Ví dụ:

CREATE OR REPLACE FUNCTION KiemTraChanLe(so_nguyen IN number)
RETURN nvarchar2
AS
BEGIN
if (mod(so_nguyen,2) = 1 OR mod(so_nguyen,2) = -1)
then
return 'so le';
else return 'so chan';
end if;
END;

Thực hiện một hàm
Quá trình lưu giữ và biên dịch một hàm cũng tương tự như đối với một thủ tục. Quá trình gọi và thực hiện một hàm được diễn ra theo ba bước:
1. Việc gọi hàm được thực hiện ngay khi tên hàm trong biểu thức được tham chiếu tới
2. Một biến host (host variable) được tự động tạo ra để lưu giữ giá trị trả về của hàm
3. Thực hiện nội dung trong phần thân hàm, lưu lại giá trị
Ví dụ:

variable kq nvarchar2(20)
execute :kq Ko hiểu KiemTraChanLe(-3)
print kq
Một số hạn chế khi sử dụng hàm trong câu lệnh SQL (câu truy vấn)
Chỉ các hàm do người dùng định nghĩa được lưu trên database mới có thể sử dụng được cho câu lệnh SQL.
Các hàm do người dùng định nghĩa chỉ được áp dụng cho điều kiện thực hiện trên các dòng dữ liệu (mệnh đề WHERE), không thể áp dụng cho các điều kiện thực hiện trên nhóm (mệnh đề GROUP).
Tham số sử dụng trong hàm chỉ có thể là loại IN, không chấp nhận giá trị OUT hay giá trị IN OUT.
Kiểu dữ liệu trả về của các hàm phải là kiểu dữ liệu DATE, NUMBER, NUMBER. Không cho phép hàm trả về kiểu dữ liệu như BOOLEAN, RECORD, TABLE. Kiểu dữ liệu trả về này phải tương thích với các kiểu dữ liệu bên trong Oracle Server.

Huỷ bỏ hàm
Tương tự như việc tạo hàm, ta có thể huỷ bỏ hàm thông qua câu lệnh SQL. Cú pháp:
DROP FUNCTION TenHam;

Các kiểu dữ liệu cơ bản
Kiểu CHAR: Kiểu CHAR dùng để khai báo một chuỗi có chiều dài cố định, khi khai báo biến hoặc cột kiểu CHAR với chiều dài chỉ định thì tất cả các mục tin của biến hay cột này đều có cùng chiều dài được chỉ định. Các mục tin ngắn hơn Oracle sẽ tự động thêm vào các khoảng trống cho đủ chiều dài. Oracle không cho phép gán mục tin dài hơn chiều dài chỉ định đối với kiểu CHAR. Chiều dài tối đa cho phép của kiểu CHAR là 255 byte.
Kiểu VARCHAR2: Kiểu VARCHAR2 dùng để khai báo chuỗi ký tự với chiều dài thay đổi. Khi khai báo một biến hoặc cột kiểu VARCHAR2 phải chỉ ra chiều dài tối đa, các mục tin chứa trong biến hay cột kiểu VARCHAR2 có chiều dài thực sự là chiều dài của mục tin. Oracle không cho phép gán mục tin dài hơn chiều dài tối đa chỉ định đối với kiểu VARCHAR2. Chiều dài tối đa kiểu VARCHAR2 là 2000 byte.
Kiểu VARCHAR: Hiện tại Oracle xem kiểu VARCHAR2 và VARCHAR là như nhau, tuy nhiên Oracle khuyên nên dùng VARCHAR2. Oracle dự định trong tương lai dùng kiểu VARCHAR để chứa các chuỗi với chiều dài biến đổi, nhưng trong phép so sánh sẽ được chỉ định theo nhiều ngữ nghĩa khác nhau.
Kiểu NUMBER: Kiểu số của Oracle dùng để chứa các mục tin dạng số dương, số âm, số với dấu chấm động.
NUMBER(p, s)
p: Số chữ số trước dấu chấm thập phân (precision), p từ 1 đến 38 chữ số
s: Số các chữ số tính từ dấu chấm thập phân về bên phải (scale), s từ -84 đến 127
NUMBER(p) Số có dấu chấm thập phân cố định với precision bằng p và scale bằng 0
NUMBER Số với dấu chấm động với precision bằng 38. Nhớ rằng scale không được áp dụng cho số với dấu chấm động.

Kiểu FLOAT: Dùng để khai báo kiểu số dấu chấm động, với độ chính xác thập phân 38 hay độ chính xác nhị phân là 126.
FLOAT(b) Khai báo kiểu dấu chấm động với độ chính xác nhị phân là b, b từ 1 đến 126. Có thể chuyển từ độ chính xác nhị phận sang độ chính xác thập phân bằng cách nhân độ chính xác nhị phân với 0.30103
Kiểu LONG: Dùng để khai báo kiểu chuỗi ký tự với độ dài biến đổi, chiều dài tối đa của kiểu LONG là 2 gigabyte. Kiểu LONG thường được dùng để chứa các văn bản.
Kiểu DATE: Dùng để chứa dữ liệu ngày và thời gian. Mặc dù kiểu ngày và thời gian có thể được chứa trong kiểu CHAR và NUMBER.
Với giá trị kiểu DATE, những thông tin được lưu trữ gồm thế kỷ, năm, tháng, ngày, giờ, phút, giây. Oracle không cho phép gán giá trị kiểu ngày trực tiếp, để gán giá trị kiểu ngày, bạn phải dùng TO_DATE để chuyển giá trị kiểu chuỗi ký tự hoặc kiểu số. Đối với dữ liệu kiểu ngày, bạn có thể thực hiện các phép toán cộng và trừ. Ví dụ:
SYSDATE+1 ngày hôm sau
SYSDATE-7 cách đây một tuần
SYSDATE+(10/1440) mười phút sau
Chuyển đổi kiểu
Chuyển đổi mặc định:
Nói chung một biểu thức không thể gồm các giá trị thuộc nhiều kiểu khác nhau, tuy nhiên Oracle cho phép chuyển đổi giưã các kiểu dữ liệu. Oracle tự động chuyển kiểu của dữ liệu trong một số trường hợp sau
Khi INSERT hoặc UPDATE gán giá trị cho cột có kiểu khác, Oracle sẽ tự động chuyển giá trị sang kiểu của cột.
Khi sử dụng các hàm hoặc các toán tử mà các tham số có kiểu không tương thích thì Oracle sẽ tự động chuyển kiểu.
Khi sử dụng toán tử so sánh mà các giá trị có các kiểu khác nhau, Oracle sẽ tự động chuyển kiểu.

Người sử dụng tự chuyển đổi:
Oracle cung cấp các hàm để chuyển đổi kiểu, ví dụ
TO_NUMBER Chuyển sang kiểu số
TO_CHAR Chuyển sang kiểu ký tự
TO_DATE Chuyển sang kiểu ngày



LỆNH LẬP TRÌNH PL/SQL ĐƠN GIẢN

Lệnh IF: Thực hiện câu lệnh theo điều kiện.
Cú pháp:
IF <điều kiện 1> THEN
Công việc 1;
[ELSIF <điều kiện 2> THEN
Công việc 2;
]
[ELSE
Công việc n + 1;
]
END IF;
Ví dụ:
if (mod(so_nguyen,2) = 1 OR mod(so_nguyen,2) = -1)
then
return 'so le';
else return 'so chan';
end if;
Lệnh lặp LOOP không định trước
Trong lệnh lặp này, số lần lặp tuỳ thuộc vào điều kiện kết thúc vòng lặp và không xác định được ngay tại thời điểm bắt đầu vòng lặp.
Cú pháp:
LOOP
Công việc;
EXIT WHEN điều kiện;
END LOOP;
Ví dụ:
x Ko hiểu 0;
y Ko hiểu 1000;
LOOP
x Ko hiểu x + 1;
y Ko hiểu y - x;
EXIT x > y;
END LOOP;
Lệnh lặp LOOP có định trước
Ngay khi bắt đầu vòng lặp, ta đã xác định được số lần lặp. Cú pháp:
LOOP Index IN Cận dưới .. Cận trên
Công việc;
END LOOP;
Ví dụ:
x Ko hiểu 0;
LOOP Index IN 1 .. 100
x Ko hiểu x + 1;
END LOOP;
Lệnh lặp WHILE
Cú pháp:
WHILE Điều kiện LOOP
Công việc;
END LOOP;
Ví dụ:
WHILE length(:Address) < 50 LOOP
:Address Ko hiểu :Address || ‘ ‘;
END LOOP;



GIỚI THIỆU CURSOR
Các bước sử dụng biến cursor:
Khai báo --> mở cursor --> lấy dữ liệu để xử lý --> đóng cursor
Khai báo:
CURSOR Tên cursor( danh sách biến) IS Câu lệnh truy vấn;
Mở cursor:
OPEN Tên cursor | Tên cursor( danh sách biến);
Lấy dữ liệu:
FETCH Tên cursor INTO Tên biến;
Đóng cursor:
CLOSE Tên cursor;
Các thuộc tính:
%isopen: trả lại giá trị True nếu cursor đang mở
%notfound: trả lại giá trị True nếu lệnh fetch hiện thời trả
lại không có row
%found: trả lại giá tri true cho đến khi fetch không còn
row nào
%rowcount: trả lại số row đã được thực hiện bằng lệnh fetch

Ví dụ:
DECLARE
-- Khai báo cursor để truy vấn dữ liệu CURSOR c_Emp IS
SELECT *
FROM emp
WHERE dept_id = 10;

-- Khai báo biến cursor tương ứng để chứa dòng dữ liệu v_Emp c_EMP%rowtype;

BEGIN
-- Mở cursor
OPEN c_Emp;
LOOP
-- Lấy dòng dữ liệu từ cursor
FETCH c_Emp INTO v_Emp;

-- Thoát khỏi vòng lặp nếu đã lấy hết dữ liệu trong cursor
EXIT WHEN c_Emp%notfound;

-- Bổ sung dữ liệu vào Emp_ext theo dữ liệu lấy được từ
cursor
INSERT INTO Emp_ext (empno, ename, job) VALUES (v_Emp.empno, v_Emp.ename, v_Emp.job); END LOOP;
-- Đóng cursor
CLOSE c_Emp;
END;




RETURN a TABLE

Trong Oracle, để trả về một table, ta phải tự định nghĩa kiểu dữ liệu table. Đầu tiên là định nghĩa một dòng sẽ gồm những thuộc tính nào:

create or replace type dong as object
(
MS varchar2(10),
HoTen varchar2(30),  Dùng nvarchar2 không được! (Chưa biết lý do, chắc không hỗ trợ)
Diem number
);

Kế đến dùng TABLE OF để định nghĩa kiểu dữ liệu table (của những thuộc tính trên):

create or replace type bang as table of dong;

Lúc này kiểu dữ liệu table đã được hiểu, ta có thể viết FUNCTION trả về table:

CREATE OR REPLACE FUNCTION InSinhVien (ma_SV varchar2)
RETURN bang
AS
t bang Ko hiểu bang(); -Bảng t vừa được khởi tạo với 3 thuộc tính trên, nhưng chưa có dòng nào.
BEGIN
FOR cur IN (Select * From SINH_VIEN Where MSSV = ma_SV) LOOP dùng cursor để lấy dữ liệu.
t.Extend; --Thêm vào cho bảng t một dòng với dữ liệu của 3 thuộc tính đều là NULL
t(t.Last) Ko hiểu dong(cur.MSSV, cur.HoTen, cur.Diem);
--Truyền dữ liệu cho table (thay NULL bằng dữ liệu của cursor)
END LOOP; Thoát vòng lặp
return t;
END;

Cuối cùng dùng TABLE để Select table của mình ra màn hình: (không cần execute hay khởi tạo biến table)

SELECT *
FROM TABLE(InSinhVien(‘0867069’));


 Chú thích thêm:
Ở kiểu dữ liệu table, ta có quyền truy xuất đến một dòng bất kỳ bằng cách truyền số nguyên index vào:
table_name(parameters)
VD: t(1): dòng 1, t(2): dòng 2

Các mode đối với kiểu dữ liệu table:

EXISTS(n) Trả về TRUE nếu có phần tử tồn tại trong plsql table.

COUNT Số phần tử (số dòng) trong plsql table

FIRST First chỉ đến dòng đầu và Last chỉ đến dòng cuối của plsql table
LAST (sẽ trả về NULL nếu table rỗng)

PRIOR(n) trả về dòng đứng trước n trong plsql table

NEXT(n) trả về dòng kế tiếp của n trong plsql table

EXTEND(n,i) Thêm vào n bản copy của phần tử (dòng) 'i' vào trong plsql table
i mặc định là NULL còn n mặc định là 1

TRIM(n) Cắt n phần tử (dòng) từ cuối của plsql table, n mặc định là 1

DELETE(m,n) Xóa các phần tử trong vùng từ m đến n
m mặc định bằng = n, n n mặc định là tất cả.

PHẦN BÀI LÀM:

Những câu không return table

1. Nhận vô 2 mốc thời gian và 1 hình thức ngân sách (Dự kiến hay Thực tế) rồi tự động tính toán tổng chi phí tiếp thị phát sinh trong khoảng thời gian giữa 2 mốc thời gian ấy, có 2 trường hợp:
- Nếu có truyền vào IDChiPhi thì chỉ tính tổng chi phí thuộc loại của IDChiPhi.
- Nếu không truyền vào IDChiPhi thì tính tổng chi phí toàn bộ.
Kết quả tính toán lưu thành 1 dòng DL trong bảng TongHopNganSach.
Hướng dẫn :

8. Nhận vô một ID của một hoạt động, tính tổng thời gian dự kiến diễn ra hoạt động ấy (tính theo đơn vị ngày). Kết quả xuất ra dạng tham số output.
Hướng dẫn :
Table: ChiTietHoatDong
 IDHoatDong  ID nhận vô
Tổng thời gian dự kiến: NgayGioDKBatDau  NgayGioDKKetThuc

10. Nhận vô một ID của một nhân viên và 2 mốc thời gian rồi tính tổng thời gian (tính theo đơn vị ngày) nhân viên ấy tham gia các hoạt động rơi vào trong khoảng thời gian giữa 2 mốc thời gian này. Kết quả xuất ra dạng tham số output.
Hướng dẫn :
Table: ChiTietHoatDong join NhanVienHoatDong
 IDNhanVien  ID nhận vô (lấy ra những nhân viên mong muốn)
Tổng thời gian nhân viên ấy tham gia các hoạt động: SUM(NgayGioDKBatDau  NgayGioDKKetThuc)

15. Nhận vô ID của một khách hàng, đếm tổng số khúc thị trường mà khách hàng này thuộc về, kết quả xuất ra dạng tham số output.
Hướng dẫn :
Table: KHTrongKhucTT join KhucThiTruong
 IDKhachHang  ID nhận vô
 Count(*)

16. Nhận vô ID của một khách hàng, tính tổng doanh thu của khách hàng này, tổng doanh thu là tổng giá trị tất cả hóa đơn mà khách hàng đã thanh toán. Kết quả được cập nhật vào bảng KhachHang và đồng thời xuất ra dạng tham số output.
Hướng dẫn :
Table: HoaDon
Tổng doanh thu: cho IDKhachHang  ID nhận vô rồi lấy SUM(TongGT)

17. Nhận vô ID của một sản phẩm, tính tổng doanh thu của sản phẩm này, tổng doanh thu là tổng giá trị tất cả chi tiết hóa đơn mà khách hàng đã thanh toán cho sản phẩm này. Kết quả được xuất ra dạng tham số output.
Hướng dẫn :
Table: ChiTietHoaDon join HoaDon
Tổng doanh thu: cho IDSanPham  ID nhận vô rồi lấy SUM(TongGT)

18. Nhận vô ID một hợp đồng, tính tổng giá trị hợp đồng ấy. Kết quả được cập nhật vào bảng HopDong và đồng thời xuất ra dạng tham số output.
Hướng dẫn :
- Giá trị hợp đồng là tổng các giá sau thuế của các chi tiết hợp đồng
- Giá sau thuế = Đơn giá x Số lượng – Tiền chiết khấu + Tiền thuế
- Tiền chiết khấu = (Đơn giá x Số lượng) x Phần trăm chiết khấu
- Tiền thuế = (Đơn giá x Số lượng – Tiền chiết khấu) x Thuế suất
Table: ChiTietHopDong join ThueSuat, HopDong (để update)
Đơn giá: ChiTietHopDong.GiaBan
Số lượng: ChiTietHopDong.SoLuong
Phần trăm chiết khấu: ChiTietHopDong.ChietKhau
Thuế suất: ThueSuat.PhanTram
Sau khi tính xong giá sau thuế, ta gộp tất cả các phép tính vào trong hàm SUM(phép tính giá sau thuế) rồi đưa vào câu truy vấn khi IDHopDong  ID nhận vô
Sau đó tiến hành update, ghi kết quả trả về của câu truy vấn vào thuộc tính TongGT trong bảng HopDong, đồng thời return kết quả đó.

19. Nhận vô ID một đơn hàng, tính tổng giá trị đơn hàng ấy. Kết quả được cập nhật vào bảng DonHang và đồng thời xuất ra dạng tham số output. Cách tính tương tự như với hợp đồng.
Hướng dẫn : Tương tự như câu trên, chỉ khác table
Table: ChiTietDonHang join ThueSuat, DonHang (update)

20. Nhận vô ID một hóa đơn, tính tổng giá trị hóa đơn ấy. Kết quả được cập nhật vào bảng HoaDon và đồng thời xuất ra dạng tham số output. Cách tính tương tự như với hợp đồng.
Hướng dẫn : Tương tự như câu trên, chỉ khác table
Table: ChiTietHoaDon join ThueSuat, HoaDon (update)

25. Nhận vô ID của một nhân viên, tính tổng doanh thu mà nhân viên này mang về cho công ty. Tổng doanh thu là tổng giá trị các hợp đồng ký với các khách hàng do nhân viên này phụ trách.
Hướng dẫn :
Table: HopDong
Tính SUM(TongGT) trong câu truy vấn với điều kiện IDNhanVien  ID nhận vô

Những câu có return table

2. Nhận vô 2 mốc thời gian và liệt kê các khách hàng có ngày sinh rơi vào trong khoảng thời gian giữa 2 mốc thời gian ấy. Thông tin khách hàng in ra gồm : ID, tenKH, TenDayDu.
Hướng dẫn :
Table: KhachHang
Định nghĩa dòng: 3 thuộc tính: ID varchar2(15), TenKH varchar2(50), TenDayDu varchar2(100)
Truy vấn những khách hàng có NgaySinh between [mốc thời gian 1 nhận vô] and [mốc thời gian 2 nhận vô] rồi trả về.

3. Nhận vô 2 mốc thời gian và liệt kê các khách hàng có ngày thành lập công ty rơi vào trong khoảng thời gian giữa 2 mốc thời gian ấy. Thông tin khách hàng in ra gồm : ID, tenKH, TenDayDu.
Hướng dẫn :
Tương tự câu 2, thay NgaySinh bằng NgayThanhLapCongTy.

4. Nhận vô 2 mốc thời gian và liệt kê các khách hàng có ngày tìm thấy rơi vào trong khoảng thời gian giữa 2 mốc thời gian ấy. Thông tin khách hàng in ra gồm : ID, tenKH, TenDayDu.
Hướng dẫn :
Tương tự câu 2, thay NgaySinh bằng NgayTimThay.

5. Nhận vô 2 mốc thời gian và liệt kê các khách hàng có ngày liên hệ gần nhất rơi vào trong khoảng thời gian giữa 2 mốc thời gian ấy. Thông tin khách hàng in ra gồm : ID, tenKH, TenDayDu.
Hướng dẫn :
Tương tự câu 2, thay NgaySinh bằng NgayLienHeGanNhat.

6. Nhận vô 2 mốc thời gian và liệt kê các khách hàng có ngày liên hệ kế tiếp rơi vào trong khoảng thời gian giữa 2 mốc thời gian ấy. Thông tin khách hàng in ra gồm : ID, tenKH, TenDayDu.
Hướng dẫn :
Tương tự câu 2, thay NgaySinh bằng NgayLienHeKeTiep.

7. Nhận vô 2 mốc thời gian và một hình thức hoạt động rồi liệt kê các hoạt động thuộc hình thức ấy và có ngày dự kiến rơi vào trong khoảng thời gian giữa 2 mốc thời gian này. Thông tin in ra gồm : ID, TieuDe, NoiDung, NgayDuKien.
Hướng dẫn :
Table: HoatDong
Định nghĩa dòng: 4 thuộc tính: ID varchar2(15), TieuDe varchar2(50), NoiDung varchar2(3000), NgayDuKien date
 Mặc định ngày tháng là DDMONYYYY, ví dụ: 21-Jun-1990
Truy vấn những khách hàng có NgayDuKien between [mốc thời gian 1 nhận vô] and [mốc thời gian 2 nhận vô] and HinhThuc  [hình thức nhận vô] rồi trả về.

12. Nhận vô ID của một đối thủ cạnh tranh, xuất ra danh sách các sản phẩm của ta mà đối thủ có sản xuất sản phẩm cùng nhóm. Thông tin xuất ra gồm : ID, tên sản phẩm, tên nhóm sản phẩm, giá cơ bản.
Hướng dẫn :
Table: SanPham SP_Ta join SanPham SP_DoiThu (join thêm NhomSanPham để lấy ra tên nhóm sản phẩm), với:
SP_Ta: gồm những sản phẩm có LaSPCuaTa  1
SP_DoiThu: gồm những sản phẩm có IDDoiThu  ID nhận vô
Điều kiện join: IDNhomSanPham bằng nhau
Định nghĩa dòng: 4 thuộc tính: ID varchar2(15), TenSanPham varchar2(50), TenNhomSanPham varchar2(100), GiaCoBan float.

13. Nhận vô ID của một đối thủ cạnh tranh, xuất ra danh sách các tiến trình bán hàng mà đối thủ đang cạnh tranh với ta. Thông tin xuất ra gồm : ID, tiêu đề, diễn giải, tên khách hàng.
Hướng dẫn :
Table: DoiThu_TienTrinhBH join TienTrinhBanHang (join thêm KhachHang để lấy TenKH)
Định nghĩa dòng: 4 thuộc tính: ID varchar2(15), TieuDe varchar2(50), DienGiai varchar2(256), TenKhachHang varchar2(50).
DoiThu_TienTrinhBH.IDDoiThu  ID nhận vô and IDKhachHang  KhachHang.ID

------ Insert ------
--KhachHang:

Insert into KhachHang values
('KH1','Khach hang mot',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,'0',NULL,'NV1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,'VN',NULL,NULL,NULL,NULL,to_date('17-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('17-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('17-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('17-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('18-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('18-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('18-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('18-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('19-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('19-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('19-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('19-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('20-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('20-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('20-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('20-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('21-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('21-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('21-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('21-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('22-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('22-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('22-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('22-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,to_date('23-MAY-2010 07:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('23-MAY-2010 11:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('23-MAY-2010 13:00:00', 'dd/MM/yyyy hh24:mi:ss'),to_date('23-MAY-2010 17:00:00', 'dd/MM/yyyy hh24:mi:ss')
,'15-MAY-2010','Nguyen Mai Khanh')


--NhanVien:
Insert into NhanVien values
('NV1','Nhan vien mot',NULL,'0','01-APR-98',NULL,'N1','5','0',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'0','01-Jan-2010','Nguyen Mai Khanh')


HopDong

Insert into HOPDONG values
('HD1','Hop dong mot','0','KH1',NULL,'1-Jun-1990',NULL,'NV1',NULL,'Nhan vien mot','Khach hang mot'
,'1-Jun-1990',NULL,NULL,'VND',NULL,NULL,NULL,NULL,NULL,NULL,'15-May-1990','Nguyen Mai Khanh') Cười vui Cười vui Cười vui Cười vui Cười vui Cười vui Cười vui Cười vui Cười vui

boy_saudoi

boy_saudoi

Thành Viên
post bài thì tinh chỉnh sao cho người khác dễ đọc tí bạn ơi
Tài liệu đây:
[You must be registered and logged in to see this link.]

letter_tran

letter_tran

Thành Viên
--6)
create or replace type dong as object
(
id char(15);
tenkh nchar(50);
tendaydu nvarchar2(100);
)
create or replace type bang as table of dong;
create or replace function bai_6(moctime1 date,moctime2 date)
return bang
as
t bang:=bang();
begin
for cur in( select id,tenkh,tendaydukh
from khachhang
where ngaylienheketiep between moctime1 and moctime2;)
idkh char(15);
tenkhtemp nchar(50);
tendaydutemp nvarchar2(100);
begin
open cur;
loop
fetch cur into idkh, tenkhtemp,tendaydutemp;
t.extend;
t(t.Last):=dong(cur.idkh,cur.tenkhtemp,cur.tendaydutemp);
exit when cur%notfound;
end loop;
close cur;
return t;
end;
--7)
create or replace type dong as object
(
id char(15),
tieude nvarchar2(50),
noidung nvarchar2(2000),
ngaydukien date
);

create or replace type bang as table of dong;

create or replace
function bai_7(moc1 date,moc2 date,hinhthuc char)
return bang
as
t bang:=bang();
cursor cur is select id,tieude,noidung,ngaydukien
from hoatdong
where ngaydukien between moc1 and moc2;
idhd char(15);
tieudetemp nvarchar2(50);
noidungtemp nvarchar2(2000);
ngaydk date;
begin
open cur;
loop
fetch cur into idhd,tieudetemp,noidungtemp,ngaydk;
t.extend;
t(t.Last)Ko hiểu(cur.idhd,cur.tieudetemp,cur.noidungtemp,cur.ngaydk);
exit when cur%notfound;
end loop;
close cur;
return t;
end;



minh chay khong ra,cu bao warning hoai.ban nao biet sai cho nao thi sua lai giup minh nha!thanks you vinamilk.... Xuc dong

letter_tran

letter_tran

Thành Viên
--15)
create or replace
function bai_15(idkh char)
RETURN FLOAT
as
kq int;
begin
select count(*) into kq
from khucthitruong join khtrongkhuctt on id=khtrongkhuctt.idkhucthitruong
where khtrongkhuctt.idkhachhang=idkh;
return kq;
end;
--17)
create or replace
function bai_17(IDKH char)
return float
as
kq float;
begin
select sum(tonggt)into kq
from hoadon
where idkhachhang=idkh;
return kq;
end;




0866183_nguyen van viet

letter_tran

letter_tran

Thành Viên
--Rat ngau
create or replace
function bai_8(Idhoatdong char)
return int
as
kq int;
begin
select ngaygiodkketthuc-ngaygiodkbatdau into kq
from chitiethoatdong
where chitiethoatdong.idhoatdong=Idhoatdong;
return kq;
end;



0866135_dinh ngoc thao

letter_tran

letter_tran

Thành Viên
--24---
Create Function TongPhanHoi (@LoaiPhanHoi char(1))returns char
As
Begin
Declare @LPH int
set @LPH = (select Count(ID) from ThongTinPhanHoi where LoaiPhanHoi = @LoaiPhanHoi)
return @LPH
End

Go

Create Proc TKTyLe @LoaiPhanHoi char(1)
As
Declare @LPH0 int
set @LPH0 = dbo.TongPhanHoi( '0')
Declare @LPH1 int
set @LPH1 =dbo.TongPhanHoi('1')
Declare @LPH2 int
set @LPH2 = dbo.TongPhanHoi('2')
Declare @TongPhanHoi int
set @TongPhanHoi = @LPH0 + @LPH1 + @LPH2
Declare @tlPH0 float
set @tlPH0 = @LPH0 / @TongPhanHoi
print N'Tỷ lệ loại phản hồi thắc mắc sản phẩm là:' + cast(@tlPH0 as varchar(10))

Declare @tlPH1 float
set @tlPH1 = @LPH1 / @TongPhanHoi
print N'Tỷ lệ loại phản hồi yêu cầu là:' + cast(@tlPH1 as varchar(10))

Declare @tlPH2 float
set @tlPH2 = 100 - (@tlPH0 + @tlPH1)
print N'Tỷ lệ loại phản hồi yêu cầu là:' + cast(@tlPH2 as varchar(10))

Go





0866040

winternight

winternight

Thành Viên
Cám ơn tất cả các bạn trong nhóm 3. Với sự cộng tác của mọi người, cho đến giờ phút này, mình có thể nói với các bạn là "Phần đồ án của chúng mình đã hoàn thành" dựa trên những ý kiến của nhiều người, cùng những bài mẫu của các bạn có kinh nghiệm và các bài làm của từng người, chỉnh sửa và hoàn thành...
Xin càm ơn mọi người. Giờ chỉ còn chờ VẤN ĐÁP thôi....

boy_saudoi

boy_saudoi

Thành Viên
OK . Chuẩn bị tinh lực và vật lực vấn đáp thôi Vỗ tay

winternight

winternight

Thành Viên
OK. Chúc nhóm mình thành công...

_AL_INOX_

_AL_INOX_

Thành Viên
hơ hơ cố lên! Phát Điên

Sponsored content


Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 2 trang]

Chuyển đến trang : 1, 2  Next

Permissions in this forum:
Bạn không có quyền trả lời bài viết