6

Im very beginner in psql and i have a question.

Here is the code:

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

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

Question is very simple: How can i pass text to my variable? If i input a number it is works correctly and i can read in the log my number, but if i pass a text like "mytext" instead of a number, i got an error:

    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:
Adam Varhegyi
  • 11,307
  • 33
  • 124
  • 222

3 Answers3

9

You have to specify the data type as part of the ACCEPT statement. If none is given, it assumes a number.

Try ACCEPT myVariable CHAR PROMPT 'Input value: '; instead.

Matthew Strawbridge
  • 19,940
  • 10
  • 72
  • 93
7

You have to enclose the character substitution variable in quotes when you use it, if it's a string, otherwise Oracle tries to interpret the value as an object name. You can see that on the 'new' version (shown because you have set verify on), and sexta13 alluded to that too. So you would do:

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

But you don't need to concatenate the value in this case (whether it's a number or s string):

 dbms_output.put_line('My input variable is: &myVariable');
Alex Poole
  • 183,384
  • 11
  • 179
  • 318
  • 3
    You should probably use two ampersands: `dbms_output.put_line('&&myVariable');` That way it won't ask for the value if it is already defined. – Big Ed May 21 '13 at 20:59
1

You don't have MYTEXT variable declared anywhere.

dbms_output.put_line('My input variable is: '||mytext); -- here is the error. It should be &myVariable.
sexta13
  • 1,558
  • 1
  • 11
  • 19