Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как правильно вытащить данные из xml?

Уважаемые форумчане, подскажите, пожалуйста, как правильно вытащить данные из xml?
Есть переменная
T-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
declare @xml xml = 
'<fee-agreement-create>
  <web-in>
    <FeeAgreement fund-code="800" number="2" date="2013-01-31" manager-id="565">
      <FeeSizes>
        <FeeSize>
          <ValueProc>   
            <Params>
              <Param name="percent">
                <ParamValues>
                  <ParamValue>1</ParamValue>
                </ParamValues>
              </Param>
              <Param name="with-vat">
                <ParamValues>
                  <ParamValue>НЕУКАЗ</ParamValue>
                </ParamValues>
              </Param>
            </Params>
            <Description>1% &amp;nbsp;&amp;nbsp;&amp;nbsp; годовых от средней стоимости чистых активов Фонда в течение финансового года</Description>
          </ValueProc>
         </FeeSize>
        <FeeSize>
          <ValueProc>
            <Code>ДССФГ</Code>
            <Params>
              <Param name="percent">
                <ParamValues>
                  <ParamValue>0.67</ParamValue>
                </ParamValues>
              </Param>
              <Param name="with-vat">
                <ParamValues>
                  <ParamValue>НЕУКАЗ</ParamValue>
                </ParamValues>
              </Param>
            </Params>
            <Description>0,67% &amp;nbsp;&amp;nbsp;&amp;nbsp; годовых от средней стоимости чистых активов Фонда в течение финансового года</Description>
          </ValueProc>
        </FeeSize>
      </FeeSizes>
    </FeeAgreement>
  </web-in>
</fee-agreement-create>'
Необходимо получить такой результат:
1 НЕУКАЗ
0.67 НЕУКАЗ

Ковыряю такой запрос, но пока не получается
T-SQL
1
2
3
4
5
6
SELECT 
    
    x.item.query('.') AS qty,
    x.item.value('ParamValue[1]', 'float') AS qty
FROM @xml.nodes('/fee-agreement-create/web-in/FeeAgreement/FeeSizes') AS x(item)
--FROM @xml.nodes('/fee-agreement-create/web-in/FeeAgreement/FeeSizes/FeeSize/ValueProc') as x(item)
Ответ: Спасибо! Нашел нужное решение.
Вопрос: как вытащить данные из innodb?

что-то случилось с базой почты dbmail
поломалась табличка dbmail_messageblks

CREATE TABLE `dbmail_messageblks` (
`messageblk_idnr` BIGINT(21) NOT NULL AUTO_INCREMENT,
`physmessage_id` BIGINT(21) NOT NULL DEFAULT '0',
`messageblk` LONGBLOB NOT NULL,
`blocksize` BIGINT(21) NOT NULL DEFAULT '0',
`is_header` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`messageblk_idnr`),
INDEX `physmessage_id_index` (`physmessage_id`),
INDEX `physmessage_id_is_header_index` (`physmessage_id`, `is_header`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=0
PARTITION BY RANGE (messageblk_idnr)
(PARTITION p0 VALUES LESS THAN (1500000) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (3000000) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (4500000) ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN (6000000) ENGINE = InnoDB,
PARTITION p5 VALUES LESS THAN (7500000) ENGINE = InnoDB,
PARTITION p8 VALUES LESS THAN (12000000) ENGINE = InnoDB,
PARTITION p9 VALUES LESS THAN (13500000) ENGINE = InnoDB,
PARTITION p10 VALUES LESS THAN (15000000) ENGINE = InnoDB,
PARTITION p11 VALUES LESS THAN (16500000) ENGINE = InnoDB,
PARTITION p12 VALUES LESS THAN (18000000) ENGINE = InnoDB,
PARTITION p13 VALUES LESS THAN (19500000) ENGINE = InnoDB,
PARTITION p14 VALUES LESS THAN (21000000) ENGINE = InnoDB,
PARTITION p15 VALUES LESS THAN (22500000) ENGINE = InnoDB,
PARTITION p16 VALUES LESS THAN (24000000) ENGINE = InnoDB,
PARTITION p17 VALUES LESS THAN (25500000) ENGINE = InnoDB,
PARTITION p18 VALUES LESS THAN (27000000) ENGINE = InnoDB,
PARTITION p19 VALUES LESS THAN (28500000) ENGINE = InnoDB,
PARTITION p20 VALUES LESS THAN (30000000) ENGINE = InnoDB,
PARTITION p21 VALUES LESS THAN (40000000) ENGINE = InnoDB,
PARTITION p22 VALUES LESS THAN (50000000) ENGINE = InnoDB)
;

в логах:
150806 10:31:29 InnoDB: Error: page 341 log sequence number 0 2964567
InnoDB: is in the future! Current system log sequence number 0 8716.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB:
InnoDB: for more information.
и
150806 10:31:30 InnoDB: Error: trying to open a table, but could not
InnoDB: open the tablespace file './test/dbmail_messageblks#P#p0.ibd'!
InnoDB: Have you moved InnoDB .ibd files around without using the
InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?
InnoDB: It is also possible that this is a temporary table #sql...,
InnoDB: and MySQL removed the .ibd file for this.
InnoDB: Please refer to
InnoDB:
InnoDB: for how to resolve the issue.

в табличке старые партиции удалялись (освобождалось место)
возможно какие-то партиции были удалены неправильно
остались файлы начиная с 8-го
объём оставшихся данных примерно 1 Тб

innodb_force_recovery = 6 и другие значения не помогают мускулю увидеть эту табличку

пробовал создавать в другой базе такую табличку и подсовывать файлики, не помогает

подскажите в какую сторону копать, каким бубном постучать, нужно вытащить данные из повреждённой таблицы
Ответ:
автор
пробовал создавать в другой базе такую табличку и подсовывать файлики, не помогает

Уверены, что аккуратно это сделали и приведен первоначальный вариант ошибки, а не то, к чему привели ваши попытки ?
Да тут скорее второй вариант из намека mysql :
автор
or you may have copied the InnoDB


Конечно, данные вытащить можно, но трудоемкость весьма высока. Из бекапа намного проще.
Вопрос: Как правильно обновить данные на форме

Всем здравствуйте

прошу подсказки, как правильно обновить данные на форме, сходу не нашел ответов.

Работа построена следующим образом - прога многопользовательская, в ней, в том числе, форма - что-то вроде счета или ттн, т.е. имеет заголовок и детали, и связана прямо с таблицей (заголовок документа) и view (детали, строки документа).

Через терминал несколько пользователей (2...4) юзают эту форму, чаще всего она открыта постоянно - смотрят в нее и на основании увиденного что-то сообщают заказчикам, редактируют, печатают и т.д.

Если с деталями, т.е. view, никаких проблем не возникает, т.е. при переходе на документ строки на форме обновляются, то с заголовками документа возникают некоторые проблемы - если один внес изменения или создал документ, то у второго они видны только после перезагрузки этой формы.

Подскажите, как правильно организовать обновление - таймер какой-то пробовать ставить, или подставить view вместо таблицы, или все вместе - в общем, куда правильно думать ?

p.s. Прошу при ответе учитывать низкий уровень подготовки по теме )
Ответ: sg12,

Доброго дня вам и всем шаманам форума.

Browse никак не спас, что было ожидаемо, а теперь подтверждено.

Вопрос точно в буферах.

В гриде, завязанном на таблицу, в методе AfterRowCalChange поместил код:

LPARAMETERS nColIndex
thisform.requery
thisform.refreshform()


В методе формы refreshform() поместил код:

LOCAL lnRow && Просто, что бы посмотреть
lnRow = 0

SELECT tablename

lnRow = TABLEREVERT(.t.)

MESSAGEBOX(lnRow,48)

*GO RECNO() && Тут оказалось не нужно

thisform.refresh


Теперь при движении по гриду таблицы все обновляет. И показывает постоянно отмену каких-то данных - то 1 строку, то 2, то как-то было 3...Что оно там отменяет, какие изменения?

А если поставить
=CURSORSETPROP("Buffering", 1, "tablename")

То ругается, что есть незафиксированные изменения таблицы.


Как мне эту хрень в человеческий облик облечь? Ну ведь не запускать же tablerevert() при каждом движении указателя (
Вопрос: помогите вытащить данные из простого XML

Добрый день.

Что-то замучался уже.


Есть xml, из которого не получается вытащить данные.


Вот сам документ:

<?xml version="1.0" encoding="UTF-8"?>
<property key="provider" value="beeline"/>



Вот так пытаюсь вытащить:


SELECT xpath('//property/key/@value', '<?xml version="1.0" encoding="UTF-8"?>
<property key="provider" value="beeline"/>
'::xml)




Ошибки нет, но и данных самих тоже не возвращает. ({})


Подскажите пожалуйста как вытащить строчку beeline из этого xml?
Ответ: комит,

Вам нужно с xml разбираться, а не с postgresql.
SELECT xpath('//s:property[@key="provider"]/@value', '<?xml version="1.0" encoding="UTF-8"?>
<Config xmlns="http://beeline.ru/settings">
<property key="provider" value="beeline"/>
<property key="tel" value="89030001131"/>
</Config>
'::xml, ARRAY[ARRAY['s', 'http://beeline.ru/settings']])
Вопрос: Вытащить данные из второй таблицы при наличии совпадения

Как вытащить данные из второй таблицы, при условии что есть совпадение по полю. На случай отсутствия, вытащить данные из первой. Наименование полей разное в обоих таблицах.
Ответ:
Gerd условия получше объясни
Что дано и что надо
Вон смотри даже мелкий не понял
(Добавление)
Лучше с примерами таблиц
А то иди угадай тебе жойн или юнион
(Добавление)
Блин
Не удивлюсь если правый жойн решит
(Добавление)
Ох герд
Ну когда ты уже станешь норм спецом?


-----
DDD
Вопрос: Как вытащить данные по нескольким условиям

Добрый день! У меня такая проблема мне нужна вытащить данные с несколькими условиями с таблицы. Вот условия
de.SERVICE_CLASS in( 'T','d','A') по этому условию должен выходить одно значение но у меня оно выходить несколько значение как можно сделать чтобы выходило одно значение. Как показано на картинке



select v.datet,
v.фИЛИАЛ,
v.nam Имя,
v.contr_name as Контракт_имя,
v.ОБОРОТЫ ОБОРОТЫ,
abs(v.ДОХОДЫ) ДОХОДЫ,
b.s Возмещение,
v.np,
b.nv,
b.db,
v.ds,
sum(abs(v.rev)) Реверс,
sum(((-1) * v.revd)) Реверс_доход,

sum(v.ОБОРОТЫ + v.ДОХОДЫ - b.s + v.rev - v.revd+ v.revd + v.revd) as Итог,
v.scheme_nam
from (select de.LOCAL_DATE datet,
sg.name as фИЛИАЛ,
ac.contract_name nam,
ac.contract_number contr_name,
case when sum(de.settl_AMOUNT)<0 then 0 else sum(de.settl_AMOUNT) end ОБОРОТЫ,
sum((de.FEE_AMOUNT)) as ДОХОДЫ,
sch.scheme_name scheme_nam,
de.SERVICE_CLASS ds,
nvl(p.rq, 0) rev,
ac.id np,
nvl(p.rd, 0) revd
from ows.acnt_contract ac
join ows.acc_scheme sch
on ac.acc_scheme__id = sch.id
join ows.service_group sg
on sg.code = ac.service_group
and sg.amnd_state = 'A'
and sg.pcat = 'C'
and sg.ccat = 'P'
join OWS.DOC_ENTRY de
on de.LOCAL_DATE >= to_date('05.11.2018', 'dd.mm.yyyy')
and de.LOCAL_DATE <= to_date('05.11.2018', 'dd.mm.yyyy')
and de.SERVICE_CLASS in( 'T','d','A')
AND DE.REQUEST_CAT in ('P', 'J')
join OWS.ACCOUNT A
on a.id = de.ACCOUNT__OID
and a.Account_Type = '3'
and a.code = 'X'
AND AC.ID = a.ACNT_CONTRACT__OID

left join (select DECODE(Des.REQUEST_CAT,
'R',
(sum(des.SETTL_AMOUNT)),
'P',
0) AS RQ,
DECODE(Des.REQUEST_CAT,
'R',
(sum(des.fee_AMOUNT)),
'P',
0) AS RD,
acc.id r
from ows.doc_entry des
join ows.acnt_contract acc
on acc.client_type = 168
and acc.ccat = 'C'
and acc.amnd_state = 'A'
and acc.pcat = 'M'
and acc.contract_number in ('001-COMM912905', '001-COMM793350','001-COMM201710','001-COMM740200')
-- and substr(acc.contract_number,1,8)='001-COMM'
and acc.CONTRACT_NAME not like ('CNP%')
and acc.CONTRACT_NAME not like ('%RPC%')
join OWS.ACCOUNT Av
on av.id = des.ACCOUNT__OID
and av.Account_Type = '3'
and av.code = 'X'
AND Acc.ID = av.ACNT_CONTRACT__OID
where des.LOCAL_DATE >=
to_date('05.11.2018', 'dd.mm.yyyy')
and des.LOCAL_DATE <=
to_date('05.11.2018', 'dd.mm.yyyy')
and des.SERVICE_CLASS in( 'T','d','A')
AND DEs.REQUEST_CAT = 'R'
group by acc.id, Des.REQUEST_CAT) p
on p.r = ac.id

where ac.client_type = 168
and ac.ccat = 'C'
and ac.amnd_state = 'A'
and ac.pcat = 'M'
and ac.contract_number in ('001-COMM912905', '001-COMM793350','001-COMM201710','001-COMM740200')
-- and substr(ac.contract_number,1,8)='001-COMM'
and ac.Contract_Name not like ('CNP%')
and ac.CONTRACT_NAME not like ('%RPC%')
group by de.LOCAL_DATE,
sg.name,
ac.contract_name,
ac.contract_number,
ac.id,
p.rq,
de.SERVICE_CLASS,
sch.scheme_name,
p.rd) v,
(
select

--DECODE(des.SERVICE_CLASS, 'T', (sum(des.SETTL_AMOUNT)),'d',0,'A',(sum(des.SETTL_AMOUNT)) ) AS s,
-- sum((des.SETTL_AMOUNT)) s,
case when des.SERVICE_CLASS='T' then (sum(des.SETTL_AMOUNT))
when des.SERVICE_CLASS='d' then 0
when des.SERVICE_CLASS='A' then 0
end s,
des.SERVICE_CLASS db,
ac.id nv
from ows.acnt_contract ac
join OWS.DOC_ENTRY des
on des.LOCAL_DATE >= to_date('05.11.2018', 'dd.mm.yyyy')
and des.LOCAL_DATE <= to_date('05.11.2018', 'dd.mm.yyyy')
and des.SERVICE_CLASS in( 'T','d','A')
AND DEs.REQUEST_CAT in ('P')
join OWS.ACCOUNT A
on a.id = des.ACCOUNT__OID
and a.Account_Type in ('4')
and a.code in ('B')

AND AC.ID = a.ACNT_CONTRACT__OID
where ac.client_type = 168
and ac.ccat = 'C'
and ac.amnd_state = 'A'
and ac.pcat = 'M' --
and ac.contract_number in ('001-COMM912905', '001-COMM793350','001-COMM201710','001-COMM740200')
-- and substr(ac.contract_number,1,8)='001-COMM'
and ac.CONTRACT_NAME not like ('CNP%')
and ac.CONTRACT_NAME not like ('%RPC%')

group by des.LOCAL_DATE, ac.id,des.SERVICE_CLASS

) b

where b.nv = v.np
group by v.datet,
v.фИЛИАЛ,
v.nam,
v.contr_name,
v.ОБОРОТЫ,
v.ДОХОДЫ,
v.np,
b.nv,
v.ds,
v.scheme_nam,
b.s,
v.rev,
b.db,
v.revd
order by v.contr_name


de.SERVICE_CLASS in( 'T','d','A')

К сообщению приложен файл. Размер - 136Kb
Ответ: таблицы acnt_contract, account, doc_entry связь идет по порядку. все цифры берутся с таблицы doc_entry
Вопрос: Как вытащить данные из сохраненного outfile

Здравствуйте.

Сохранил данные во внешний файл с помощью
SELECT ... into outfile ...

Скажите, данные этого файла можно потом использовать в других SQL-запросах?

Версия MYSQL сервера: 5.5

С уважением
Ответ: miksoft, файл нашел и открыл, данные там есть.

когда записывал запрос был вида
SELECT
...
INTO OUTFILE 'possibly_recognized_images.text'

работаю под root, должны же быть привилегии на локальном XAMPP
Вопрос: Перенос данных

Приветствую ВСЕХ!
подскажите как правильно перенести данные из полей

Тип элемента управления :"Поле со списком"
Тип источника строк:"Таблица или запрос"
Разрешить несколько значений:"Да"

По задаче есть несколько таблиц связанных данным образом,
я добавляю к таблицам служебное поле(int), заполняю его.

и хотел бы в место "a;b;c" получить "1;2;3"

table t0
id(int),zzz(memo),my_key(int)
1,"a",2
2,"",1
3,"a;b;c",3

zzz(Источник строк)
исходный запрос) SELECT t1.text FROM t1 ORDER BY text;
новый запрос) SELECT t1.my_key FROM t1 ORDER BY text;

table t1
id(int),text(memo),my_key(int)
11,"a",1
12,"b",2
44,"c",3

сответственно хотелось получить
table t0
id(int),zzz(memo),my_key(int)
1,"1",2
2,"",1
3,"1;2;3",3

Заранее спасибо!
Ответ:
Mixon
Приветствую ВСЕХ!
подскажите как правильно перенести данные из полей

Тип элемента управления :"Поле со списком"
Тип источника строк:"Таблица или запрос"
Разрешить несколько значений:"Да"

По задаче есть несколько таблиц связанных данным образом,
я добавляю к таблицам служебное поле(int), заполняю его.

и хотел бы в место "a;b;c" получить "1;2;3"

table t0
id(int),zzz(memo),my_key(int)
1,"a",2
2,"",1
3,"a;b;c",3

zzz(Источник строк)
исходный запрос) SELECT t1.text FROM t1 ORDER BY text;
новый запрос) SELECT t1.my_key FROM t1 ORDER BY text;

table t1
id(int),text(memo),my_key(int)
11,"a",1
12,"b",2
44,"c",3

сответственно хотелось получить
table t0
id(int),zzz(memo),my_key(int)
1,"1",2
2,"",1
3,"1;2;3",3

Заранее спасибо!


решается запросом:
SELECT t0.id, iif(isnull(zzz),"",fff(t0.zzz)), t0.my_key
FROM t0;

где fff - функция в общем модуле
Public Function fff(s As String) As String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("select * from t1")
rst.MoveFirst
Do While Not rst.EOF
    s = Replace(s, rst.Fields("text"), rst.Fields("my_key"))
    rst.MoveNext
Loop
fff = s
End Function
Вопрос: Как получить данные через DBLINK

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production

Как получить данные через DBLINK ?

На одном сервере имеется процедура в пакете, которая возвращает курсор:
...
CREATE OR REPLACE package body package1 is
procedure test_proc(p_inn varchar2,
                            p_cursor out sys_refcursor) is 
...

Если ее вызвать через dblink на другом сервере, то выдается ошибка:
DECLARE
    p_inn varchar2(50) := '771603983483';
BEGIN
    package1.test_proc@dblink(p_inn,:p_cursor);
END;
ORA-24338: указатель оператора не выполнен

поискал аналогичное в поиске

Tom Kyte
refcursors may not be returned over a dblink

Решил попробовать создать табличную функцию и вытащить ее тоже через dblink
(в надежде, что в табличную функцию впихну результаты курсора)
CREATE OR REPLACE package EGRIP_IMPORT.p_test is
    type test_rowGet is record (fnum numeric, fvar varchar2(100 char), fdate date);
    type test_table is table of test_rowGet;
    function get_test_table RETURN test_table pipelined;
end;
CREATE OR REPLACE PACKAGE BODY EGRIP_IMPORT.p_test
AS
    function get_test_table RETURN test_table pipelined
    is
    begin
        for curr in
        (
            ---- fnum numeric, fvar varchar2(100 char), fdate date
            select 12 as fnum, 'qwerqwerqwer' as fvar, to_date('12.01.2017','dd.mm.yyyy') as fdate from dual
            union all
            select 4 as fnum, 'zxcvzxvzxv' as fvar, to_date('05.01.2014','dd.mm.yyyy') as fdate from dual
        )
            loop pipe row(curr);
        end loop;
    end;
end;

Если ее вызвать через dblink
SELECT * FROM TABLE(P_TEST.get_test_table@dblink);
ORA-06553: PLS-752: Табличная функция GET_TEST_TABLE находится в противоречивом состоянии.

Как вытащить данные ?
Ответ:
Владимир СА
AlexFF__|
пропущено...

CREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ...
Я вообще то спросил про идеологию... Мне нужен результат курсор..
Один пользователь вызвал с одним параметром, другой с другим...
Как это будет согласовываться с :
автор
CREATE OR REPLACE TYPE ... OID '90A1350CAC40434EE044001CC4B76823' IS TABLE of ...
?
Это создается 1 раз, я правильно понимаю ?
Как в нее будут записываться данные при разных вызовах ? Перекрывание ?

Действительно, чего я лезу ...
Сколько раз уже себе говорил, что умные сами разберутся, а остальные =(
Вопрос: чет не пойму как из поля c json вытащить данные...

Короч, есть поле, там такие данные а внутри данных еще данные.

и как эти данные что внутри - не знаю как вытащить.
Ответ: Лентяй!!!

sereginseregin


SELECT json_array_length(('
	{ "data" : 
			{ "rec" : 
				{ "snfn" : "99098001002891", "kktno" : "000000000050003    ", "iur" : "48471  ", "fdno" : 11114707
				, "dt" :{ "$date" : "2012-06-29T16:14:00.000+0000" }
				, "fpd" :{ "$binary" : "MQhkjhkjJyk", "$type" : "00" }, "shftno" : 216, "prtxs" : [ 1 ]
				, "data_inside" : [ 
							{ "nt" : "Бензин АИ-95", "cost" : 319, "amt" : "2.000", "nds18" : 97, "ctot" : 638 }, 
							{ "nt" : "Тряпка для стекла", "cost" : 34899, "amt" : "1.000", "nds18" : 5324, "ctot" : 34899 }, 
							{ "nt" : "Коньяк СТАРЫЙ ПЕД росс 0.375L", "cost" : 48366, "amt" : "1.000", "nds18" : 7378, "ctot" : 48366 }, 
							{ "nt" : "Пиво ДУБ И ОБРУЧ св 4,9% ПЭТ 1.5L", "cost" : 12799, "amt" : "1.000", "nds18" : 1952, "ctot" : 12799 } 
							] 
				} 
			}
	}'::JSON)->'data'->'rec'->'data_inside')