2013-05-21 29 views
5

Im rất mới bắt đầu trong psql và tôi có một câu hỏi.SQL * Thêm cách chấp nhận biến văn bản từ lời nhắc?

Đây là mã:

SET serveroutput ON 
ACCEPT myVariable PROMPT "Input value: "; 

BEGIN 
    dbms_output.put_line('My input variable is: '||&myVariable); 
END; 

Câu hỏi rất đơn giản: Làm thế nào tôi có thể vượt qua văn bản để biến tôi? Nếu tôi nhập vào một số đó là hoạt động chính xác và tôi có thể đọc trong log số của tôi, nhưng nếu tôi vượt qua một văn bản như "myText" thay vì một con số, tôi đã nhận một lỗi:

old:BEGIN 


    dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 


    new:BEGIN 

    dbms_output.put_line('My input variable is: '||mytext); 
END; 

    Error starting at line 5 in command: 
    BEGIN 
     dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 
    Error report: 
    ORA-06550: 2 sor, 50 oszlop: 
    PLS-00201: identifier 'MYTEXT' must be declared 
    ORA-06550: 2 sor, 3 oszlop: 
    PL/SQL: Statement ignored 
    06550. 00000 - "line %s, column %s:\n%s" 
    *Cause: Usually a PL/SQL compilation error. 
    *Action: 

Trả lời

8

Bạn phải chỉ định loại dữ liệu như một phần của ACCEPT statement. Nếu không có, nó giả định một số.

Hãy thử ACCEPT myVariable CHAR PROMPT 'Input value: '; để thay thế.

1

Bạn không có biến MYTEXT được khai báo ở mọi nơi.

dbms_output.put_line('My input variable is: '||mytext); -- here is the error. It should be &myVariable. 
+0

Không, mã là ở trên, đầu vào VALUE là "mytext" mà tôi đã đưa ra! –

6

Bạn phải kèm theo biến thay thế ký tự trong dấu ngoặc kép khi bạn sử dụng nó, nếu đó là một chuỗi, nếu không Oracle sẽ cố gắng giải thích giá trị làm tên đối tượng. Bạn có thể thấy rằng trên phiên bản 'mới' (được hiển thị bởi vì bạn có set verify on) và sexta13 cũng ám chỉ điều đó. Vì vậy, bạn sẽ làm gì:

dbms_output.put_line('My input variable is: '||'&myVariable'); 

Nhưng bạn không cần phải nối các giá trị trong trường hợp này (cho dù đó là một con số hoặc s string):

dbms_output.put_line('My input variable is: &myVariable'); 
+3

Có lẽ bạn nên sử dụng hai ký hiệu: 'dbms_output.put_line ('&& myVariable');' Bằng cách đó, nó sẽ không yêu cầu giá trị nếu nó đã được xác định. –

+0

Câu trả lời hay nhất cho vấn đề này ... – Iero

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