SQL*Plus Tip: @ vs. @@

I built huge amounts of PL/SQL code with SQL*Plus, using the ‘@’ command to import source files, without ever running across the ‘@@’ command. But one day I found a limitation in ‘@’, and in one fell swoop changed all my SQL and PL/SQL scripts to use ‘@@’ and have never looked back.

You need ‘@@’ if you ever want to compile source code by running SQL*Plus from a different directory. For example, I had source files that would call each other like so:

@variables;
@file1;
@file2;

and it all worked fine, as long as I went into the directory where all the files were and ran SQL*Plus from there.

But to automate my build process, I started running various scripts from a different directory, such as:

sqlplus $credentials source/file1.sql

For file1.sql to be able to import file2.sql and so on, I needed to use ‘@@’. With ‘@@’, all the import commands are processed relative to the directory where the original file sits, not the directory where you run SQL*Plus.

http://tahitiviews.blogspot.com/2007/01/sqlplus-tip-vs.html

When executing a script on SQLPlus, it prints a sequence of numbers instead of output

From your edited question… you have to terminate the PL/SQL block with a / on a new line to make it end and run, otherwise SQL*Plus will keep prompting for more lines of code (which is the numbers you’re seeing). The documentation shows how to run PL/SQL blocks. And prompt is a SQL*Plus command so you can’t use it inside a PL/SQL block. You also don’t have your block syntax right:

SET serveroutput ON;
DECLARE
    mode NUMBER(1) := 1;
BEGIN
    IF mode = 1 THEN
        DBMS_OUTPUT.PUT_LINE('HERE');    
    END IF;
END;
/

prompt fim

http://stackoverflow.com/questions/20971731/when-executing-a-script-on-sqlplus-it-prints-a-sequence-of-numbers-instead-of-o