2011-01-26 71 views
6

Trong PL/SQL, bạn có thể tham chiếu kiểu cột bảng cho các biến thủ tục và đối số sử dụng cú pháp TABLE.COLUMN_NAME% loại. Điều này giúp bảo trì mã dễ dàng hơn nhiều. Có tương đương với điều này trong ngôn ngữ thủ tục lưu trữ mysql?Các thủ tục lưu trữ Mysql Kiểu cột Tham chiếu

Ai có thể cần điều này? Xem xét báo cáo kết quả chèn sau:

INSERT INTO NL_LIST (NAME, EMAIL) 
    SELECT 
     NAME, 
     normalizeEmail(EMAIL) 
    FROM 
     RAW_NL_LIST; 

Đối với điều này tôi muốn để có thể xác định normalizeEmail trong (xấp xỉ) theo cách sau:

CREATE FUNCTION normalizeEmail(email RAW_NL_LIST.EMAIL%type) 
RETURNS NL_LIST.EMAIL%type 
BEGIN 
... implementation here 
END; 
+0

Trong bối cảnh những gì được bạn tham khảo các cột trong bảng? Bạn có thể đưa ra một ví dụ về một truy vấn mà bạn sẽ làm điều này? – TehShrike

+0

Xem http://www.dba-oracle.com/plsql/t_plsql_var_const.htm để có giải thích về khái niệm. –

+0

Nếu bạn viết một thủ tục, rất có thể là bạn cần khai báo một vài biến. Những thứ này, chủ yếu là lấy đầu vào từ các cột trong bảng. Để đảm bảo rằng loại biến của bạn tương thích với giá trị cột được cung cấp, bạn có thể sử dụng cú pháp nêu trên để khai báo các biến dựa trên loại cột của bảng. Đây được coi là thực hành tốt nhất khi lập trình PL/SQL. Câu hỏi của tôi là liệu cùng một loại điều có thể có trong mysql hay không. –

Trả lời

4

Không, bạn không thể tự động phù hợp với loại được sử dụng trong định nghĩa bảng với loại trong một thủ tục được lưu trữ. Bạn sẽ phải tự tra cứu định nghĩa bảng và nhập đúng loại.

Xem: http://dev.mysql.com/doc/refman/5.6/en/create-procedure.html

Ở đây nó nói:

CREATE 
[DEFINER = { user | CURRENT_USER }] 
PROCEDURE sp_name ([proc_parameter[,...]]) 
[characteristic ...] routine_body 

CREATE 
    [DEFINER = { user | CURRENT_USER }] 
    FUNCTION sp_name ([func_parameter[,...]]) 
    RETURNS type 
    [characteristic ...] routine_body 

proc_parameter: 
    [ IN | OUT | INOUT ] param_name type 

func_parameter: 
    param_name type 

type: 
    Any valid MySQL data type <<<-- no special magic allowed 

.... 
Các vấn đề liên quan