SQL redesigning


 
Thread Tools Search this Thread
Top Forums Programming SQL redesigning
# 1  
Old 12-23-2010
SQL redesigning

The following request give the expected result (respecting a certain output formatting)
But i was wondering if the same result could be produced in a more "optimized way" (Oracle 9i by the way)

Code:
set feedback off
set pagesize 0
set trimspool on
ttitle off
btitle off
set verify off
set linesize 260
column name heading "TABLESPACE" format A25
column size_mb heading "SIZE (M)" format 99999990.9
column "USED (%)" format 990
select ts name,
    round(size_mb,2) size_mb,
        round(decode(total_size_mb,0,'',(total_size_mb-total_free_mb)*100/total_size_mb),0) "USED (%)",
        autoextensible "AUT"
from
(select a.tablespace_name ts,
        nvl(c.mb,0)+nvl(e.mb,0) size_mb,
              decode(lower(a.contents),'temporary',
                decode(sign(nvl(e.tot_mb,0)-nvl(e.mb,0)),1,'YES','NO'),
                decode(sign(nvl(c.tot_mb,0)-nvl(c.mb,0)),1,'YES','NO'))
                autoextensible,
              decode(lower(a.contents),'temporary',
                decode(sign(nvl(e.tot_mb,0)-nvl(e.mb,0)),1,
                  nvl(e.tot_mb,0),nvl(e.mb,0)),
                decode(sign(nvl(c.tot_mb,0)-nvl(c.mb,0)),1,
                  nvl(c.tot_mb,0),nvl(c.mb,0)))
                total_size_mb,
              decode(lower(a.contents),'temporary',
                decode(sign(nvl(e.tot_mb,0)-nvl(e.mb,0)),1,
                  nvl(e.tot_mb,0)-nvl(f.used_mb,0),
                    nvl(e.mb,0)-nvl(f.used_mb,0)),
                decode(sign(nvl(c.tot_mb,0)-nvl(c.mb,0)),1,
                  nvl(c.tot_mb,0)-nvl(c.mb,0)+nvl(d.free_mb,0),
                    nvl(d.free_mb,0)))
                total_free_mb
       from
         dba_tablespaces a,
         (select tablespace_name ts,
                 sum(extents) ext,
                 count(*) seg
          from dba_segments group by tablespace_name) b,
         (select tablespace_name ts,
                 sum(nvl(bytes,0))/1024/1024 mb,
                 count(*) files,
                 sum(decode(lower(autoextensible),'no',nvl(bytes,0),nvl(maxbytes,0)))/1024/1024 tot_mb
          from dba_data_files group by tablespace_name) c,
         (select tablespace_name ts,
                 sum(nvl(bytes,0))/1024/1024 free_mb
          from dba_free_space group by tablespace_name) d,
         (select tablespace_name ts,
                 sum(nvl(bytes,0)/1024/1024) mb,
                 count(*) files,
                 sum(decode(lower(autoextensible),'no',nvl(bytes,0),
                   nvl(maxbytes,0)))/1024/1024 tot_mb
          from dba_temp_files group by tablespace_name) e,
         (select tablespace_name ts,
                 sum(nvl(bytes_used,0))/1024/1024 used_mb
          from gv$temp_extent_pool group by tablespace_name) f
        where
          a.tablespace_name=b.ts(+) and
          a.tablespace_name=c.ts(+) and
          a.tablespace_name=d.ts(+) and
          a.tablespace_name=e.ts(+) and
          a.tablespace_name=f.ts(+))
order by 1 desc
/

# 2  
Old 12-23-2010
Define "optimized". What's the output like now, what would you like?
# 3  
Old 12-23-2010
by "optimized" i meant : with least internal operations as possible so the calculation will be quick.

The output looks like

Code:
SYSTEM                                850       50 YES
UNDO                            26450        8 YES
TBSUSR                             20        0 YES
TBSAPP40                          30340       85 YES
TBSAPPC                            283168       98 YES
PERFSTAT                             5500       96 YES

# 4  
Old 12-24-2010
Do you know about tkprof and alter session set sql_trace true; ? It provides detailed information about the performance of your query.

We cannot do much without at least an explain plan output. Assuming your query is in fact too slow.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Storing multiple sql queries output into variable by running sql command only once

Hi All, I want to run multiple sql queries and store the data in variable but i want to use sql command only once. Is there a way without running sql command twice and storing.Please advise. Eg : Select 'Query 1 output' from dual; Select 'Query 2 output' from dual; I want to... (3 Replies)
Discussion started by: Rokkesh
3 Replies

2. Shell Programming and Scripting

Run SQL thru shell script: how to get a new line when run sql query?

Hi, this's Pom. I'm quite a new one for shell script but I have to do sql on shell script to query some information from database. I found a concern to get a new line...When I run my script, it retrieves all data as wondering but it's shown in one line :( What should I do? I'm not sure that... (2 Replies)
Discussion started by: Kapom
2 Replies

3. Programming

SQL - is it possible

I have a table with the following structure: trxNo expiryDate remoteTrxNo 445455 2011-06-26 0 445455 2011-02-26 0 445999 2011-07-30 0 445999 2011-03-28 0 There are other columns that make the records unique but they are not relevant to my... (4 Replies)
Discussion started by: praktikal
4 Replies

4. UNIX for Advanced & Expert Users

Call parallel sql scripts from shell and return status when both sql are done

Hi Experts: I have a shell script that's kicked off by cron. Inside this shell script, I need to kick off two or more oracle sql scripts to process different groups of tables. And when both sql scripts are done, I will continue in the shell script to do other things like checking processing... (3 Replies)
Discussion started by: huasheng8
3 Replies

5. Shell Programming and Scripting

Execute multiple SQL scripts from single SQL Plus connection

Hi! I would like to do a single connection to sqlplus and execute some querys. Actually I do for every query one connection to database i.e echo 'select STATUS from v$instance; exit' > $SQL_FILE sqlplus user/pass@sid @$SQL_FILE > $SELECT_RESULT echo 'select VERSION from v$instance;... (6 Replies)
Discussion started by: guif
6 Replies

6. Shell Programming and Scripting

How to use sql data file in unix csv file as input to an sql query from shell

Hi , I used the below script to get the sql data into csv file using unix scripting. I m getting the output into an output file but the output file is not displayed in a separe columns . #!/bin/ksh export FILE_PATH=/maav/home/xyz/abc/ rm $FILE_PATH/sample.csv sqlplus -s... (2 Replies)
Discussion started by: Nareshp
2 Replies

7. UNIX for Dummies Questions & Answers

Execute PL/SQL function from Unix script (.sql file)

Hi guys, I am new on here, I have a function in oracle that returns a specific value: create or replace PACKAGE BODY "CTC_ASDGET_SCHED" AS FUNCTION FN_ASDSCHEDULE_GET RETURN VARCHAR2 AS BEGIN DECLARE ASDSchedule varchar2(6); ASDComplete... (1 Reply)
Discussion started by: reptile
1 Replies

8. Shell Programming and Scripting

unix variables from sql / pl/sql

How do I dynamically assign the below output to unix shell variables so I can build a menu in a shell script? Example: var1 = 1 var2= SYSTEM var3 = 2 var4= UNDOTBS1 and so on, then in the shell script I can use the variables to build a menu. set serveroutput on declare... (2 Replies)
Discussion started by: djehres
2 Replies

9. Shell Programming and Scripting

Calling SQL LDR and SQL plus scripts in a shell script

Hi- I am trying to achieve the following in a script so I can schedule it on a cron job. I am fairly new to the unix environment... I have written a shell script that reads a flat file and loads the data into an Oracle table (Table1) via SQLLDR. This Works fine. Then, I run a nested insert... (5 Replies)
Discussion started by: rajagavini
5 Replies
Login or Register to Ask a Question