SQL Plus doesn't RPAD
Hi All,
I'm running into a peculiar problem where I'm trying to pool an oracle table that has about 30 million records into a text file. I'm using Toad for Oracle version 10.5. When I spool my results, I'm rpading a column to 54 characters with blank spaces. When I run this spool as a script in Toad or using Toad's Quest Script Runner it pads it no problem but when I try doing it through the "Execute SQL via SQL Plus" command in Toad it doesn't do the rpading. I don't get it. Anyway, here's the script...just removed the name of my table and column names and replaced them with more generic names:
Spool on
set heading off
SET PAGESIZE 0
SET TRIMSPOOL ON
SET LINESIZE 100
set feedback off
set echo off
set termout off
Spool "C:\test.txt"
select
rpad(column1,54) as column1
from crg_input_final
where rownum <=100
order by
column2,
column1;
Spool off;
I always assumed that SQL is SQL...no matter if you run it in Toad or SQL Plus or wherever. Am I missing something?
Thanks
SET TRIMSPOOL ONthis will always remove trailing spaces from your spool file.
You could try:
set linesize 54
set trimspool off
spool "C:\test.txt"
select column1
from crg_input_final
where rownum <=100
order by
column2,
column1;
Spool off;if you need padding on the last column.
Similar Messages
-
Inserting digitized signature in SQL plus reports
Our company has decided to use SQL plus for reporting needs. We have few reports with digitized signature printed at the bottom. Is this possible in SQL plus. Digitized signature should be in which format? Can somebody help me. If SQL plus doesn't support this, we mat need to look for alternate tools for reports.
Actually, it looks like Forums do something strange to URLs pasted into posts. Sorry!
The thread URL is Re: store/retrieve data in lang other than eng when CHARACTERSET is not UTF8 -
Why so spartan and user unfriendly SQL*Plus?
Hi,
I am relatively new to Oracle and therefore I would like to know why SQL*Plus command line utility is so spartan and user unfriendly.
I am talking about SQL*Plus 10.2.0.1 included in Oracle 10g R2 for Linux x86. On many UNIXes platforms there are readline library and pager utility for output piping. Typical example of user-friendly command line utility is MySQL client. So, my question is:
why is SQL*Plus binary different (not linked against readline library and doesn't provide a call to pager for output piping)?
Thanks
AlbertI think there is no tool that will do eveything that you want.
SQL*Plus doesn't format good. Cannot use it for writing packages(sort of). But, it's good for things like 'set autoprint on' to name one. And it's good for tracing.
SQL Developer: I personally got a bug filed on this one, and since then, lost interest in it.
PL/SQL Developer: Love this for the way it integrates Visual Sourcesafe, but, it sucks in quering tables with XMLTypes.
SQL Navigator: Love this for running queries against nested tables. But, this thing sucks at formatting. Somehow , unlike PL/SQL Developer, it semi CHECKS if your code is gonna compile or not BEFORE it formats. I say, dude, I am gonna have to compile the procedure in the database anyway, just format the damn thing.
Toad: Basically use it to use the session browser, may use it to Kill a session. ( I know I should be using the provided DBMS packages to do that.).
If you ask me, I can live with SQL*Plus and PL/SQL developer. Pl/SQL Developer because of formatting capabilities and Sourcesafe integration- which is absolutely important for PL/SQL too).
My two cents.
Rahul. -
Checking Module to Prevent SQL Plus usage on Database
I have a question regarding logon triggers checking against SYS_CONTEXT('USERENV', 'MODULE'). I created a logon trigger that looks for SYS_CONTEXT('USERENV', 'MODULE') = 'SQLPLUS.EXE'
and if it matches then it only allows specified users to log in to the database. This code works but I am confused as to why when I check SYS_CONTEXT('USERENV', 'MODULE') after I login in
shows SQL*Plus which clearly does not match my IF statement in my logon trigger.
Second issue. If I rename sqlplus.exe to jeff.exe and run it I am abled to log in to the database as a non DBA user. But the module still shows as SQL*Plus. Why is this?
Database Version: 11.2.0.2 64bit
OS: Windows Server 2003 R2
Client: 11.2.0.1
/*********************Create Trigger******************************/
CREATE OR REPLACE TRIGGER application_check_al
after logon ON database
DECLARE
l_username VARCHAR2(20);
l_module VARCHAR2(20);
BEGIN
l_username := SYS_CONTEXT('USERENV', 'SESSION_USER');
l_module := UPPER(SYS_CONTEXT('USERENV', 'MODULE'));
IF l_module LIKE 'SQLPLUS.EXE' AND
l_username NOT IN ('SYS', 'SYSTEM', 'DVOWNER', 'DVMGR') THEN
raise_application_error(-20001, 'SQLPLUS ACCESS RESTRICTED FOR NON DBA USERS');
END IF;
END application_check_al;
/*********************Run SQLPLUS******************************/
SQL*Plus: Release 11.2.0.1.0 Production on Wed Mar 7 12:22:23 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Enter user-name: jeffc@dev
Enter password:
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: SQLPLUS ACCESS RESTRICTED FOR NON DBA USERS
ORA-06512: at line 10
Enter user-name: system@dev
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining, Oracle Database Vault
and Real Application Testing options
system@dev> select sys_context('USERENV','MODULE') from dual;
SYS_CONTEXT('USERENV','MODULE')
SQL*Plus
SQL>jeff81 wrote:
That doesn't make sense. Why am I able to log in when I renamed the exe? And why does the module still show as SQL*Plus?You are right - it does not make sense. The idea that Oracle might perhaps set module to SQLPLUS.EXE on executable start, and then re set from SQLPLUS.EXE to SQL*Plus after connect, or in glogin.sql, to ensure it is consistent across all operating system never crossed my mind.
You might want to refer to Support Note "SQL*Plus Session/Module is Not Showing in V$SESSION" [ID 1312340.1] to see whether anything in there helps. I'm pretty sure http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#i2698573 doesn't help much, though.
I'd certainly be raising it with Support as a potential security challenge, to get that potential hole closed.
Edited by: Hans Forbrich on Mar 7, 2012 2:23 PM
I wonder whether Oracle put that capability in there - if an untained SQLPLUS.EXE, it tells you that it is SQLPLUS.EXE, but if renamed it tells you 'SQL*Plus'? Specuklation, but it is one thing I might do to subtly raise the flag. Best bet - ask Support.
Edited by: Hans Forbrich on Mar 7, 2012 2:29 PM -
SQL Plus command to print a report in Landscape format
Hi,
what is the SQL Plus command to print a report in Landscape format?841731 wrote:
Hi,
what is the SQL Plus command to print a report in Landscape format?SQLPlus doesn't print, and it doesn't know about 'landscape' vs. 'portrait' any more than it knows about fonts. the only 'formatting' it knows is line size, page size. And all it does with line size is know where to insert a CR/LF pair (windows) or a CR (*nix). The only thing it knows to do with page size is repeat column headers.
The rest is up to whatever application you use to open the pure asciii text spool file. -
Hi
We have a big problem, We can't create internal orders, when I run the CREATE INTERNAL ORDER, it finish with ERROR:
Concurrent Manager encountered an error while running SQL*Plus for your concurrent request 134980682.
Review your concurrent request log and/or report output file for more detailed information.
this is the log:
+---------------------------------------------------------------------------+
Purchasing: Version : 12.0.0
Copyright (c) 1979, 1999, Oracle Corporation. All rights reserved.
POCISO module: Create Internal Orders
+---------------------------------------------------------------------------+
Current system time is 26-JUL-2013 09:21:09
+---------------------------------------------------------------------------+
+-----------------------------
| Starting concurrent program execution...
+-----------------------------
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
Begin create internal sales order
Updating Req Headers
14 Reqs selected for processing
Top of Fetch Loop
Source Operating Unit: 82
Selecting Currency Code
Currency Code : MXP
Selecting Order Type
Order Type ID:1001
Selecting Price List from Order Type
Deliver To Location Id: 196
Inserting Header : 3908784
Getting the customer id
Getting the customer id: 15334
Unhandled Exception : ORA-01403: no data found
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+
Concurrent Manager encountered an error while running SQL*Plus for your concurrent request 134980682.
Review your concurrent request log and/or report output file for more detailed information.
+---------------------------------------------------------------------------+
Executing request completion options...
Output file size:
78
Output is not being printed because:
The print option has been disabled for this report.
Finished executing request completion options.
+---------------------------------------------------------------------------+
Concurrent request completed
Current system time is 26-JUL-2013 09:21:14
+---------------------------------------------------------------------------+
Some suggestion for resolve it??
Thanks & Regards.In the document 294932.1 Section 4 there are no pre-installation patches or update for OS RedHat LinuxAS4.
When I type echo $LD_ASSUME_KERNEL it doesn't display any value so do I need to set the LD_Assume_Kernal value manually.
If yes, please let me know the path and command to set the kernel value.
Thanks
Amith -
How to detect client OS from SQL*Plus script
Sometimes in a SQL*Plus script I need to execute OS commands e.g.
host rm tempfile.bufHowever of course Windows has no "rm" command by default, so I have to edit the script to use
host del tempfile.bufNow if I could define &DELETE (for example, "cat"/"type" is another) as a substitution variable, I could just use
host &DELETE tempfile.bufMaybe I need more coffee but all I could come up with was something like this:
def rm=rm
def cat=cat
spool sqlplus_windows_defs.cmd
prompt echo def rm=del
prompt echo def cat=type
spool off
host .\sqlplus_windows_defs > sqlplus_windows_defs.sql
@sqlplus_windows_defs.sql
host &rm sqlplus_windows_defs.cmd
host &rm sqlplus_windows_defs.sqlthe idea being that you first define the variables for nix ("rm" and "cat"), then attempt to create and execute a Windows command file containing DOS versions ("dele" and "type"), which does not run under nix. Unfortunately the OS failure message (".sqlplus_windows_defs: not found" in Unix) appears on the screen despite SET TERM OFF, so I'm back where I started.
I know there are various ways to get the server OS, and you can get the SQL*Plus version with &_SQLPLUS_RELEASE and so on, but I can't see a way to determine the client OS. Any suggestions?Thanks guys. This seems to work in Windows XP - will try on Unix when I get a chance:
col DELETE_COMMAND new_value DELETE_COMMAND
col LIST_COMMAND new_value LIST_COMMAND
def list_command = TYPE
def delete_command = DEL
SELECT DECODE(os,'MSWIN','TYPE','cat') AS list_command
, DECODE(os,'MSWIN','DEL','rm') AS delete_command
FROM ( SELECT CASE WHEN UPPER(program) LIKE '%.EXE' THEN 'MSWIN' END AS os
FROM v$session
WHERE audsid = SYS_CONTEXT('userenv','sessionid') );
host &LIST_COMMAND xplan_errors.lst
host &DELETE_COMMAND xplan_errors.lstIf the user doesn't have access to v$session it will just default to the Windows commands.
http://www.williamrobertson.net/code/xplan.sql -
SQL*PLUS console not coming back when create a tablespace in ORACLE RAC11g
Hi all,
I have run a create command in oracle RAC 11g system (2 nodes, ASM) by SQL*PLUS, every datafile for this tablespace is 1.5GB, I want to create 6 tablespace at the first:
1. It run successfully for the first tablespace , it toook 4-5 minutes to come back;
2. It run much longer time for the second tablespace , it took over 20 minutes to come back;
3. The third tablespace , I waited for 45 minutes and it didn't come back.
I have check in alert.log, and saw all three tablespace were successfully created about 4-5 minutes. And I also use another SQL*PLUS to query in user_tablespaces. the third tablespace did display in user_tablespaces view.
From that time, I tried 4,5,6, it took me 30 minutes to create 1.5GB big tablespace. It doesn't make sense for me.
Any sugguestion? Thanks.How did they create the disk group?
How big are the devices/LUNs?
are all of the LUNS the same size?
Check the alert log for both the RDBMS and ASM.
What redundancy did they use?
in asmca, what is the total size of the disk group(s)? ( or sum total_mb from v$asm_diskgroup for each disk group) -
I seem to be unable to copy and paste text using the "highlight text and right-click" procedure in Sql*Plus 8.0.6.0.0. The right-mouse button seems to work in everything else so it doesn't seem to be the mouse that is the problem. Does anybody know if this could be due to the way Sql*Plus is set up or some other Oracle related problem?
You can either do SET PAGESIZE 0 which turns off all headings.
Of you can do SET PAGESIZE 50000 which will reprint the headings every 50,000 lines.
50,000 is the max. I don't know of a way to show the headings once, and only once. (you can turn off headings and fake them one time with a select ... from dual before your main query). -
Chinese Characters in SQL Plus
Hi, I wonder how do I input the chinese characters in SQL plus? I have set the NLS_LANG value to chinese characterset in the REGEDIT but it doesn't display the chinese characters. Is there any chinese version on Oracle JDeveloper Suite?
Cheersi have installed sqlplus and oracle db in the same PC under chinese win xp.
i found that if you spool the output to a text file, and type in dos-prompt, it still cannot display the chinese character properly. but if you open the text file by notepad, bingo, you can the chinese character.
i think that it is because dos-prompt application is non-unicode application. so it could not display unicode character properly.
as a result, if you want to display unicode character in non-unicode application (run sqlplus under dos-prompt), you have to set the NLS_LANG environment variable which match the character set of non-unicode application which your operating system assigned. in my case, it should be Big5. then oracle would do the conversion for you automatically, i.e. from unicode in DB to Big5 in client.
I either set the NLS_LANG environment variable in one of the 2 ways:
NLS_LANG=american_america.zht16big5 or
NLS_LANG=american_america.zht16hkscs
Regards,
KH -
Where its not possible to use a variable (&&var) in SQL*PLUS ?
SQL*Plus Command Reference - DEFINE
Whenever you run a stored query or script, SQL*Plus substitutes the value of variable for each substitution variable referencing variable (in the form &variable or &&variable)
The question is which are the limits of this. Can eg even be between a 'STR&&varING' passed as parameter to some function? Or as parameter I can pass only a single variable and there isnt such auto-casting level ?
I have created DBCA Scripts to batch create a DB. So I want inside these scripts to replace the DBNAME with a variable. So I can create different DBS with these prescriptions from an API tool.
E.g here there are 6 different scenarios where I might need to pass the variable. I dont know
1. On which of the bellow scenarios I can inject the &&var
2. On which I cant and thus have to create a 2nd VAR to inject the 1st one
3. Which dont accept variables at all - but only static text
@D:\app\admin\DBNAMEY\scripts\CreateDB.sql
spool D:\app\admin\DBNAMEY\scripts\CreateDB.log append
startup nomount pfile="D:\app\admin\DBNAMEY\scripts\init.ora";
CREATE DATABASE "DBNAMEY"
DATAFILE 'D:\app\oradata\DBNAMEY\system01.dbf' SIZE ...
GROUP 2 ('D:\app\oradata\DBNAMEY\redo02.log') SIZE 51200K,
I may not start testing the scripts 6 times fearing corrupting my Workstation on half executed scripts.GoodfireGeorge wrote:
SQL*Plus Command Reference - DEFINE
Whenever you run a stored query or script, SQL*Plus substitutes the value of variable for each substitution variable referencing variable (in the form &variable or &&variable)
The question is which are the limits of this. Can eg even be between a 'STR&&varING' passed as parameter to some function? Or as parameter I can pass only a single variable and there isnt such auto-casting level ?
I have created DBCA Scripts to batch create a DB. So I want inside these scripts to replace the DBNAME with a variable. So I can create different DBS with these prescriptions from an API tool.
E.g here there are 6 different scenarios where I might need to pass the variable. I dont know
1. On which of the bellow scenarios I can inject the &&var
2. On which I cant and thus have to create a 2nd VAR to inject the 1st one
3. Which dont accept variables at all - but only static text
@D:\app\admin\DBNAMEY\scripts\CreateDB.sql
spool D:\app\admin\DBNAMEY\scripts\CreateDB.log append
startup nomount pfile="D:\app\admin\DBNAMEY\scripts\init.ora";
CREATE DATABASE "DBNAMEY"
DATAFILE 'D:\app\oradata\DBNAMEY\system01.dbf' SIZE ...
GROUP 2 ('D:\app\oradata\DBNAMEY\redo02.log') SIZE 51200K,
I may not start testing the scripts 6 times fearing corrupting my Workstation on half executed scripts.
If you can't test because you are afraid the test might fail, you need to address that issue first. No one on the web is going to give you iron-clad assurance that some code you write is going to work exactly as you expect.
Your script is trying to create a database? What's the worst thing that can happen if it doesn't work? Do you know how to manually dis-mantle whatever your script does? If not, you need to learn. The knowledge you will gain from that exercise will go a long way to improving your understanding of how these things interrelate. -
Can i comment out lines of code in a .sql script file to be run in SQL PLUS
Hi All,
I have commented out part of the script, and when i ran the script (.sql) file in Sql*Plus
I am getting some errors like
SP2-0734: unknown command beginning
how to avoid these errors?
any help is appreciated
Thanks
R.R>
select * from dual; -- me too!Nope, not this one...
test@ORA10G>
test@ORA10G> host type c:\test.sql
select * from dual; -- me too!
test@ORA10G>
test@ORA10G> -- doesn't work
test@ORA10G>
test@ORA10G> @c:\test.sql
2
test@ORA10G>
test@ORA10G> @c:\test.sql
2 /
select * from dual; -- me too!
ERROR at line 1:
ORA-00911: invalid character
test@ORA10G>
test@ORA10G> -- now this works...
test@ORA10G> host type c:\test.sql
select * from dual -- me too!
test@ORA10G>
test@ORA10G> @c:\test.sql
D
X
test@ORA10G>
test@ORA10G> -- and so does this...
test@ORA10G> host type c:\test.sql
select * from dual -- me too!
test@ORA10G>
test@ORA10G> @c:\test.sql
D
X
test@ORA10G>
test@ORA10G>pratz -
How to "end" function definition in SQL plus?
I am using Oracle 11g and SQL plus.
I am trying to define a function and get back to the SQL prompt, but it is just not exiting the function definition.
SQL> create function dept_count (dept_name varchar(20))
2 returns integer
3 begin
4 declare d_count integer;
5 select count (* ) into d_count
6 from instructor
7 where instructor.dept_name = dept_name
8 return d_count;
9 end
10 ;
11
12
13
14
15
16 ;;;
17 end dept_count;
18 ;
19
20 ; <--- I was expecting the SQL> prompt here but it doesn't appear.
What should I do? Please help. Thanks.And, to answer probably the most frequently asked question when I was an Oracle instructor ...
If you are saving this statement in a file to execute later, after the "/" at the bottom, hit return, so that your file contains a line feed after the /, rather than your file ending with the /
Otherwise you get the annoying, but completely harmless, error message "Input truncated after (number) characters" when you compile the program. -
Set Column width in query (not using SQL*Plus)
How can I Set Column width in query
I understand you can set column width using
column col1 FORMAT A5
select col1 from table1;But this only works in SQL*Plus
I want to be able to do this in a regular SQL query window (not in SQL*Plus), how can I do it.....
I am using a 'SQL window' in PL/SQL Developer IDE
and when I use this syntax it says:
ORA-00900: Invalid SQL statement
Any suggestions are appreciated...
thanks,
M.Did you try using RPAD or LPAD functions? They fill the unfilled part of a string with character you provide... either on right or left side depending on what function you use.
e.g.
SELECT RPAD('Smith', 10, ' ') Name FROM dual;http://www.adp-gmbh.ch/ora/sql/rpad.html
Edited by: Zaafran Ahmed on Nov 10, 2010 11:50 AM -
Hi,
I have Oracle 10g XE and Oracle Dev Suite installed on my computer. I want to connect to 10g XE via SQL Plus or from within Forms Builder but I don't know what to specify for Host String (in SQL Plus) or Database (in Forms Builder). "XE" doesn't work. Any ideas what should I put in for those params?
Thanks in advance,
BehiFirst you must make sure that your tnsnames.ora is configured correctly in 10g Devsuite (Forms)
to do this you either configure it manually or use the Net Configuration Assistant found under
All Programs<devsuit_home>/configuration and migration tools/Net Configuration Assistant.
For manual configuration open the tnsnames.ora found under directory
%oraclehome%/network/admin/tnsnames.ora
and add a connection descriptor and save the file. remeber to take a backup copy.
your file should look something like this.
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)Regards,
Tony
Maybe you are looking for
-
Adobe Photoshop 13.0.2 Installation failed. Error Code: U44M1P7
I get a message: Adobe Photoshop 13.0.2 Installation failed. Error Code: U44M1P7 What went wromg?
-
PAPI - execute process based on selected participants
In a process, there are two roles. In role one and two, interactive activities are set to user selects transition. Each role has one interactive activity. If a user finish task in activity one of role one, BPM workspace (10g) let this user select the
-
Hello Experts, I have a little problem with my Java programm: Test remote = null; * try {* // Create a new intial context, which loads from jndi.properties file. * Context ctx = new InitialContext();* *
-
Hi all, we are performing an upgrade from SAP 46C to ECC 6.0 and I download one Role from PFCG (46C). I use a sandbox system ECC 6.0 for testing PFCG Upload but I obtain the popup message: Incorrect release; see long text Incorrect release; see long
-
How can I edit the background colour of captions?
Hi I am new to Captivate, and am liking what I am able to produce. However, I would like to use our corporate colour as the background of the captions. Does anyone know of any way I can do this? Many thanks in anticipation. Anne