Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как получить сгенерированный sql-query OracleCommand / 9 сообщений из 9, страница 1 из 1
21.01.2013, 10:02
    #38117420
MasterOfCode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OracleConnection oracleConnection = new OracleConnection("Data Source=src;User Id=usr;Password=pwd;");
string sql = "select field1 from field2=:p1";
OracleCommand cmd = new OracleCommand(sql, oracleConnection);
OracleDataReader oracleDataReader;
using (oracleConnection)
{
    oracleConnection.Open();
    cmd.Parameters.Add("p1", OracleDbType.Int32, ParameterDirection.Input).Value=1;
    oracleDataReader = cmd .ExecuteReader(); //возвращает пустой набор
}


Как мне посмотреть какой он запрос сгенерировал (включая параметры) и отправил на сервер?
...
Рейтинг: 0 / 0
21.01.2013, 10:11
    #38117436
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
Никак. Команды не реализуют такого функционала.
...
Рейтинг: 0 / 0
21.01.2013, 11:16
    #38117552
sphinx_mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
MasterOfCode
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
OracleConnection oracleConnection = new OracleConnection("Data Source=src;User Id=usr;Password=pwd;");
string sql = "select field1 from field2=:p1";
OracleCommand cmd = new OracleCommand(sql, oracleConnection);
OracleDataReader oracleDataReader;
using (oracleConnection)
{
    oracleConnection.Open();
    cmd.Parameters.Add("p1", OracleDbType.Int32, ParameterDirection.Input).Value=1;
    oracleDataReader = cmd .ExecuteReader(); //возвращает пустой набор
}


Как мне посмотреть какой он запрос сгенерировал (включая параметры) и отправил на сервер?
Кто Вам сказал, что он что-то должен генерировать?
Что Вы ему написали - то он и отправил.
...
Рейтинг: 0 / 0
21.01.2013, 11:31
    #38117593
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
Генерации на самом деле никакой не происходит, просто подстановка параметров с определенным форматированием. Всё это скрыто в реализации и никакие опубликованные методы для получения общей строки запроса после подстановки параметров не предоставляется.
...
Рейтинг: 0 / 0
21.01.2013, 11:33
    #38117600
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
Или речь о профайлере со стороны сервера БД? Тогда это в другой форум, оракл.
...
Рейтинг: 0 / 0
21.01.2013, 12:09
    #38117714
MasterOfCode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
МСУГенерации на самом деле никакой не происходит, просто подстановка параметров с определенным форматированием. Всё это скрыто в реализации и никакие опубликованные методы для получения общей строки запроса после подстановки параметров не предоставляется.
Жаль конечно. Придется оракл трассировать.
...
Рейтинг: 0 / 0
21.01.2013, 12:12
    #38117723
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
MasterOfCodeМСУГенерации на самом деле никакой не происходит, просто подстановка параметров с определенным форматированием. Всё это скрыто в реализации и никакие опубликованные методы для получения общей строки запроса после подстановки параметров не предоставляется.
Жаль конечно. Придется оракл трассировать.
Используй ORM, а не эти унылые команды с ридерами. ORM умеют снимать трассу сгенеренного запроса.
...
Рейтинг: 0 / 0
21.01.2013, 15:40
    #38118209
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
MasterOfCode,

Код: sql
1.
GRANT ALTER SESSION TO "SCOTT"



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Oracle.DataAccess.Client;

namespace ConsoleApplication19
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var connection = new OracleConnection("Data Source=oradb;User ID=scott;Password=pass"))
            {
                connection.Open();

                string startTraceCmdText = @"alter session set sql_trace=true";

                using (var cmd1 = new OracleCommand(startTraceCmdText, connection))
                {
                    var z = cmd1.ExecuteNonQuery();
                }

                string sqlCommand = @"select * from emp where empno=:p_empno";

                using (var cmd3 = new OracleCommand(sqlCommand, connection))
                {
                    cmd3.Parameters.Add(":p_empno", 7369);
                    var reader = cmd3.ExecuteReader();

                    while (reader.Read())
                        Console.WriteLine("{0} - {1}", reader["empno"], reader["ename"]);
                }

                string stopTraceCmdText = @"alter session set sql_trace=false";

                using (var cmd4 = new OracleCommand(stopTraceCmdText, connection))
                {
                    cmd4.ExecuteNonQuery();
                }
            }
        }
    }
}



Ловить трейс там

C:\app\oracle\diag\rdbms\oradb\oradb\trace\oradb_ora_4284.trc

Потом

Код: sql
1.
tkprof oradb_ora_4284.trc out.txt explain=scott/pass sys=no



out.txt
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
TKPROF: Release 11.2.0.1.0 - Development on Mon Jan 21 15:36:33 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Trace file: oradb_ora_4284.trc
Sort options: default

********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing 
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
********************************************************************************

SQL ID: 4tk6t8tfsfqbf
Plan Hash: 0
alter session set sql_trace=true


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        1      0.00       0.00          0          0          0           0

Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 84  (SCOTT)
********************************************************************************

SQL ID: aaqv6djvutmqa
Plan Hash: 2949544139
select * 
from
 emp where empno=:p_empno


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0          2          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.00       0.00          0          2          0           1

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 84  (SCOTT)

Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS BY INDEX ROWID EMP (cr=2 pr=0 pw=0 time=0 us cost=2 size=87 card=1)
      1   INDEX UNIQUE SCAN PK_EMP (cr=1 pr=0 pw=0 time=0 us cost=1 size=0 card=1)(object id 73197)


Rows     Execution Plan
-------  ---------------------------------------------------
      0  SELECT STATEMENT   MODE: ALL_ROWS
      1   TABLE ACCESS (BY INDEX ROWID) OF 'EMP' (TABLE)
      1    INDEX (UNIQUE SCAN) OF 'PK_EMP' (INDEX (UNIQUE))

********************************************************************************

SQL ID: aam2chsgpj7mb
Plan Hash: 0
alter session set sql_trace=false


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        2      0.00       0.00          0          0          0           0

Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 84  (SCOTT)



********************************************************************************

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          0          0           0
Execute      3      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0          2          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        6      0.00       0.00          0          2          0           1

Misses in library cache during parse: 1
Misses in library cache during execute: 1


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute      0      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        0      0.00       0.00          0          0          0           0

Misses in library cache during parse: 0

    3  user  SQL statements in session.
    0  internal SQL statements in session.
    3  SQL statements in session.
    1  statement EXPLAINed in this session.
********************************************************************************
Trace file: oradb_ora_4284.trc
Trace file compatibility: 11.1.0.7
Sort options: default

       1  session in tracefile.
       3  user  SQL statements in trace file.
       0  internal SQL statements in trace file.
       3  SQL statements in trace file.
       3  unique SQL statements in trace file.
       1  SQL statements EXPLAINed using schema:
           SCOTT.prof$plan_table
             Default table was used.
             Table was created.
             Table was dropped.
      42  lines in trace file.
       0  elapsed seconds in trace file.


...
Рейтинг: 0 / 0
21.01.2013, 15:52
    #38118236
Lord British
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить сгенерированный sql-query OracleCommand
MasterOfCode,

Интересно, а как оно без ошибок могло отработать?
Код: plsql
1.
string sql = "select field1 from field2=:p1";



Код: plsql
1.
select field1 from /* а где табличка? */ field2=:p1
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как получить сгенерированный sql-query OracleCommand / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]