Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Get Oracle server version and SQL session id with OCIAttrGet()

user11763611Nov 15 2017 — edited Nov 17 2017

Hi all!

After connecting to Oracle using OCI, we need to know the current server version, and the user session id.

I searched then OCI doc, but could not find anything about that.

Is there a way to get that information, without executing SQL?

Obviously for now we do some SQL like:

  SELECT banner FROM v$version WHERE banner LIKE 'CORE%'

  SELECT userenv('SESSIONID') FROM dual

But if we could avoid that it would speed the connection steps.

Thanks!

Seb

This post has been answered by Sdhamoth-Oracle on Nov 15 2017
Jump to Answer

Comments

Frank Kulash

Hi,

Whenever you have a question, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all the tables involved, and the exact results you want from that data, so that the people who want to help you can re-create the problem and test their ideas.

Explain, using specific examples, how you get those results from that data.

Always say what version of Oracle you're using (e.g. 11.2.0.2.0).

See the forum FAQ:

Use the analytic ROW_NUMBER function to assign numbers 1, 2, 3, ... to each row, with a separate series for each worker and date.  Each distinct combination of worker and assigned number will result in a row of output.

CarlosDLG

You will usually get quicker and more accurate answers if you post create table statements and inserts with some sample data, along with an explanation of the specific problem you are facing.

Here is one way to do it:

WITH test_data as

(

SELECT 'Project_A' project,'John' worker,date '2016-05-23' the_date FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-23'  FROM DUAL union all

SELECT 'Project_A','Mary',    date '2016-05-24' FROM DUAL union all

SELECT 'Project_A','Steve',date '2016-05-24' FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-25' FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-26'  FROM DUAL union all

SELECT 'Project_B','John',date '2016-05-23' FROM DUAL union all

SELECT 'Project_B','Steve',date '2016-05-24' FROM DUAL

)

select worker,c23,c24,c25,c26 from

(

  SELECT t.*, dense_rank() over (PARTITION BY worker ORDER BY project) AS rn

  FROM test_data t

)

pivot

(

  MAX(project) FOR the_date in (date '2016-05-23' AS C23,date '2016-05-24' AS C24,date '2016-05-25' AS C25,date '2016-05-26' AS C26)

)

ORDER BY worker;

Results:

WORKERC23C24C25C26
JohnProject_A
JohnProject_B
MaryProject_AProject_AProject_AProject_A
Steve Project_A
Steve Project_B
Paulzip

You cannot dynamically generate your columns (e.g. generate your column names based on the data) without using special techniques (dynamic SQL), SQL has to have static columns at execution time.

Here's another way to do it.

select worker, d1, d2, d3, d4

from

(

  select project, worker,

         dense_rank() over (order by the_date) as date_rank,

         dense_rank() over (order by project) as project_rank

  from test_data t

)

pivot (

  max(project)

  for date_rank in (1 as D1, 2 as D2, 3 as d3, 4 as d4)

)

order by worker

WORKERD1D2D3D4
JohnProject_A
JohnProject_B
MaryProject_AProject_AProject_AProject_A
SteveProject_A
SteveProject_B
1 - 3
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Dec 15 2017
Added on Nov 15 2017
9 comments
2,333 views