小编Eri*_*ikL的帖子

使用XMLTABLE和xquery从xml中提取数据

我有以下XML:

<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
    xmlns:per="http://www.something.com/2014/11/bla/person">
    <per:Initials>E.C.</per:Initials>
    <per:FirstName>Erik</per:FirstName>
    <per:LastName>Flipsen</per:LastName>
    <per:BirthDate>1980-07-01</per:BirthDate>
    <per:Gender>Male</per:Gender>
</per:Person>
Run Code Online (Sandbox Code Playgroud)

从这个xml我想在PL/SQL中提取一些数据.我想使用XMLTABLE,因为不推荐使用EXTRACT和EXTRACTVALUE函数.

我可以使用此查询提取数据:

select pers.Initials,
       pers.Firstname
    into lsInitials,
         lsFirstname
    from
    XMLTABLE ('*:Person' passing pxRequest
    columns Initials           PATH '*:Initials',
            Firstname          PATH '*:FirstName'
    )  pers;
Run Code Online (Sandbox Code Playgroud)

我正在使用通配符作为命名空间,因为我真的不关心发送方用于命名空间的缩写,我知道无论如何获取我的数据的确切路径.

有了这段代码,我有两件事让我困惑:

编辑:

我发现当我删除元素的命名空间并使它们大写时,它可以工作.因此,列名称似乎需要匹配xml元素名称才能使其工作.我还没弄明白如何使用命名空间XML.

  • 该文档还指出"对于除FOR ORDINALITY列之外的每个结果列,您必须指定列数据类型",但是,如果没有它,它似乎工作正常.为列和我正在获取数据的变量指定它似乎也有点多余.如果不指定数据类型的任何想法可能会让我陷入困境?

可运行的代码示例:

SET SERVEROUTPUT ON;
DECLARE

    pxRequest xmltype := xmltype('<per:Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                                    xsi:schemaLocation="http://www.something.com/2014/11/bla/webservice.xsd"
                                    xmlns:per="http://www.something.com/2014/11/bla/person">
                                    <per:Initials>E.C.</per:Initials>
                                    <per:FirstName>Erik</per:FirstName>
                                    <per:LastName>Flipsen</per:LastName>
                                    <per:BirthDate>1980-01-01</per:BirthDate>
                                    <per:Gender>Male</per:Gender>
                                </per:Person>');
    lsInitials  varchar2(100);
    lsFirstname varchar2(100);                                


begin

    select pers.Initials,
           pers.Firstname
        into lsInitials,
             lsFirstname
        from
        XMLTABLE ('*:Person' passing pxRequest
        columns Initials           PATH '*:Initials', …
Run Code Online (Sandbox Code Playgroud)

oracle xquery plsql xmltable

9
推荐指数
1
解决办法
3012
查看次数

从oracle生成大型xml文件:最佳实践

我目前正在开始一个项目的工作,我将不得不根据数据库中的几个表编写代码(pl/sql)来导出大型XML文件.

导出文件可能会变得非常大,可能包含多达700,000个客户(包括他们的地址,订单,电话号码等).

我想知道是否有人对这方面的最佳方法有一些提示.我显然可以在其中写出丢失XMLELEMENTS的选项,但这意味着整个文件将在内存中生成.

还有一个XML模式(XSD)可供文件必须遵守.我还想知道是否有任何方法可以将表"映射"到XML模式.

任何提示都表示赞赏.

oracle plsql

8
推荐指数
1
解决办法
1万
查看次数

Apache:使用反向代理并运行本地网站

在我的linux机器上,我将apache2作为反向代理运行,因为我想在端口8083上创建另一个Web服务器,同时也使其受密码保护.为此,我将此添加到我的apache2.conf中:

<VirtualHost *:80> 
   <Location / >
       AuthName "Protected Area"
       AuthType Basic
       AuthUserFile /home/pi/.htpasswd
       Require valid-user 
   </Location>
      ProxyPass / http://localhost:8083/
      ProxyPassReverse / http://localhost:8083/
</VirtualHost> 
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力,但现在我也想用apache来服务一个网站,我想通过制作/ mysite指向/ var/www之类的东西来做到这一点,但我无法弄清楚如何做到这一点或者如果可能的话.

有任何想法吗?

apache reverse-proxy

8
推荐指数
1
解决办法
2万
查看次数

从TSQL存储过程调用SOAP Web服务

我试图在TSQL中构建一个存储过程来调用Web服务.我以前在Oracle中做过这个,但在MSSQL中似乎并不那么容易.当然,有很多理由不在存储过程中执行此操作,但由于此过程仅用于每日批处理,因此性能不是太大的问题.我想要做的事情如下:向webservice发送一个全名,webservice将返回一个名称分为名字,前缀,姓氏等的名称.返回的值将需要写入表.

我在http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Stored-Procedure)找到了一个有趣的程序 - 使用-MSXML.aspx似乎完全可以做到我想要什么,但只要你在调用中添加一个主体,我就会遇到像"参数不正确"这样的错误.这篇文章也说明了这一点,显然没有简单的解决方案.我绝对需要发送请求正文.

我还阅读了很多关于使用CLI或"Web服务任务编辑器"或"SSIS"位来解决它的文章,我找不到任何关于从哪里开始的教程.现在我只有Microsoft SQL服务器管理工​​作室.

顺便说一下,我在SQL Server 2012上.

关于我应该采取什么方向的任何想法?

我已经找到了这个描述,看起来很干净:http://www.databasejournal.com/features/mssql/article.php/3821271/Calling-a-Web-Service-from-within-SQL-Server.htm但是,在安装visual studio 2012并创建"SQL服务器数据库项目"后,我无法在解决方案上下文菜单中选择"添加Web引用",菜单中只有这样的选项.

t-sql sql-server clr web-services sql-server-2012

7
推荐指数
1
解决办法
5万
查看次数

php:laravel慢速视图渲染时为渲染javascript for highcharts

我正在建立的网站中有一个奇怪的问题.在有问题的页面上我使用了一些highcharts.一切正常,但渲染时间太长(约5秒).

当我用chrome检查它时,我看到这样的东西:

在此输入图像描述

highcharts的8个脚本位于红色框中.很明显,问题出在那里.

为了渲染highcharts(javascript)的脚本,我创建了一个控制器和视图.我以这种方式在模板中使用它们:

{{ Html::script(url ('/highchart/gauge', [$humidityInside->sd_value , 'humidityInside', 'Luchtvochtigheid binnen','%',0,100,'#55BF3B','#DDDF0D','#DF5353'])) }}
Run Code Online (Sandbox Code Playgroud)

在高图控制器中我只是将变量发送到视图:

 public function gauge($value,$divname,$chartTitle,$suffix,$minValue,$maxValue,$colorMin,$colorMed,$colorMax)
        {
            return view('highchart.gauge')->with(compact('value' , 'divname','chartTitle','suffix','minValue','maxValue','colorMin','colorMed','colorMax'));
        }
Run Code Online (Sandbox Code Playgroud)

视图然后只是呈现javascript,将变量放在正确的位置:

$(function () {

    var gaugeOptions = {

        chart: {
            type: 'solidgauge'
        },

        title: null,

        pane: {
            center: ['50%', '85%'],
            size: '140%',
            startAngle: -90,
            endAngle: 90,
            background: {
                backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                innerRadius: '60%',
                outerRadius: '100%',
                shape: 'arc'
            }
        },

        tooltip: {
            enabled: false
        },

        // the value axis
        yAxis: {
            stops: [
                [0.1, '{{ …
Run Code Online (Sandbox Code Playgroud)

javascript php jquery highcharts laravel

7
推荐指数
2
解决办法
1491
查看次数

修改 Laravel 刀片变量而不显示它

在我的刀片代码中,我需要一个计数器,以便为由 foreach 循环呈现的 div 提供唯一 ID。为此,我在刀片模板中创建了一个变量,如下所示:

{{ $counter = 0 }}
Run Code Online (Sandbox Code Playgroud)

我在 html 中使用它只是输出它 {{ $counter = 0 }}

后来,我像这样增加它: {{ $counter++ }}

这一切都像一个魅力,除了{{ $counter++ }}它不仅增加变量,它还输出到视图。

有什么办法可以防止这种情况吗?

php laravel blade laravel-blade

6
推荐指数
2
解决办法
4100
查看次数

使用安全性标头中的nonce从Java调用Soap Web服务

我正在尝试从Java调用Web服务。除了Web服务期望以用户名和密码以及随机数的形式提供某种安全性外,这基本上没有那么困难。当我尝试从SoapUi调用Web服务时,我看到原始消息看起来像这样:

<soapenv:Envelope xmlns:sch="http://somedomain.com/pe/ws/schema"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <wsse:Security soapenv:mustUnderstand="1"
            xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
            xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
            <wsse:UsernameToken wsu:Id="UsernameToken-E70691ACBDEFEC750814238295617871">
                <wsse:Username>usr</wsse:Username>
                <wsse:Password
                    Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"
                    >pw</wsse:Password>
                <wsse:Nonce
                    EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
                    >4smQZF5KMSktEXrQc0v5yw==</wsse:Nonce>
                <wsu:Created>2015-02-13T12:12:41.784Z</wsu:Created>
            </wsse:UsernameToken>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <sch:EventSubmitRequest>
            <sch:Event>
                <sch:EventId>392</sch:EventId>
                <sch:Recoverable>false</sch:Recoverable>
            </sch:Event>
        </sch:EventSubmitRequest>
    </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

消息中显而易见的元素是用户名,密码和已创建,但让我感到困惑的是随机数。在示例中,该字段的值为4smQZF5KMSktEXrQc0v5yw ==,但是每个请求的值都不同(这很有意义,因为根据Wikipedia,随机数是仅使用一次的任意数字)。在四处搜索时,我找不到如何在Java中生成随机数的可用示例(尽管我确实在堆栈溢出时找到了一些php示例,但我无法轻松地验证它们是否起作用)。虽然我不介意自己构造该随机数,但我想知道这是否真的必要,但我有点希望这是Java中的标准功能。

以下是我正在使用的代码:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.xml.namespace.QName;
import javax.xml.soap.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class soaptest {

    public static void main(String args[]) {
        try {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // Send SOAP Message to SOAP Server
            String url = …
Run Code Online (Sandbox Code Playgroud)

java ws-security soap nonce

5
推荐指数
1
解决办法
1万
查看次数

使用sqlLoader将XML文件加载到xmltype字段中

我正在尝试将XML文件加载到oracle 11g中的XMLTYPE clob中.到目前为止,我想出了这个控制文件:

LOAD DATA 
INFILE 'stocknotify.xml'
append INTO TABLE order_input 
(
    xml LOBFILE(CONSTANT 'stocknotify.xml') TERMINATED BY EOF
)
Run Code Online (Sandbox Code Playgroud)

这个控制文件工作得很好,除了它加载XML文件7次.我想这是因为XML文件由7行组成,但是,我不知道如何阻止sql loader执行并只加载文件一次.

有任何想法吗?

xml oracle sql-loader

5
推荐指数
1
解决办法
773
查看次数

在t-sql中对大量执行模数

我需要计算一个数字的余数除以另一个数字.例如,这些数字:

271011240311350356232122%97

当我只想在sql语句中这样做时,它就像一个魅力:

选择271011240311350356232122%97;

但是当我在varchar变量中有那个大数字时,我似乎无法完成工作.我无法将其转换为int或甚至bigint,因为它太大了.我无法将其转换为实数,因为您无法在实数上使用模运算符.

有任何想法吗...?

sql t-sql sql-server

4
推荐指数
1
解决办法
533
查看次数

php:加载oracle驱动程序给出错误"无法加载动态库 - 找不到指定的过程."

我似乎对PHP有一个奇怪的问题.

我已经将一堆软件从一台服务器迁移到另一台服务器.在服务器上,一些脚本与Oracle建立连接,因此能够建立连接,安装oracle客户端并使用tnsnames文件.从sql*plus连接工作.

一些脚本使用PDO,所以为此我在php.ini中启用了extension = php_pdo_oci.dll.这些脚本就像一个魅力.

其他一些脚本使用像oci_connect这样的函数,这些函数需要像php_oci8.dll这样的扩展.使用xammp(我用作apache/php/mysql包)php_oci8_12c.dll已经发送,所以我认为扩展就足够了.

启动服务器时,我在php errorlog中看到这些错误:

Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_12c.dll' - The specified procedure could not be found.
Run Code Online (Sandbox Code Playgroud)

该文件位于C:\ xampp\php\ext \中,因此不应该是一个问题.在同一个目录中的其他扩展名被选中而没有任何问题.我也尝试加载php_oci8.dll,我从旧服务器上取了,但得到了完全相同的问题.

我发现类似问题的一些答案我试过没有成功: - 将dll复制到c:\ windows\system - 将php ext目录添加到系统PATH变量 - 将oracle客户端添加到系统PATH变量(已经在那里)

我正在使用的软件版本:

  • 操作系统:Windows 2012 R2 x64
  • PHP:5.6.3
  • Oracle数据库:11.2.0.4.0

有任何想法吗?

php oracle dll pdo

4
推荐指数
1
解决办法
1万
查看次数

找出PL/SQL脚本正在等待的内容

让我们说一个用户正在运行一个巨大的PL/SQL脚本,由2000行组成,在那里的某个地方,有一个声明"等待"某些条件变为真.为此,使用了像这个例子的结构:

BEGIN

  --Wail until 2 o clock
  WHILE (to_date('06-01-2014 02:00','dd-mm-yyyy hh24:mi') > sysdate)
  LOOP
    DBMS_LOCK.SLEEP(60);
  END LOOP;

  --code to execute after 2 o clock

END;
Run Code Online (Sandbox Code Playgroud)

现在脚本中有几种这样的构造,脚本似乎永远在运行,所以用户问我它在哪里.困难在于我可以在动态性能视图中看到它正在运行,例如使用此查询:

SELECT S.USERNAME,
  s.sid,
  s.osuser,
  t.sql_id,
  sql_text
FROM v$sqltext_with_newlines t,
  V$SESSION s
WHERE t.address  =s.sql_address
AND t.hash_value = s.sql_hash_value
AND s.status     = 'ACTIVE'
AND s.username  <> 'SYSTEM'
ORDER BY s.sid,
  t.piece;
Run Code Online (Sandbox Code Playgroud)

但这将返回整个脚本,而不是它当前的声明.有没有办法解决这个问题?

sql oracle plsql

3
推荐指数
1
解决办法
1336
查看次数

Microsoft sql存储过程未正确执行select语句

我是微软T-sql(使用到Oracle PL/SQL)的新手,我用一个非常简单的程序遇到了烦人的问题.

我创建了以下过程

CREATE PROCEDURE [dbo].[ele_test] @productId INT
AS
DECLARE @productCode VARCHAR(100);
DECLARE @productDescription VARCHAR(100);
DECLARE @error VARCHAR(100);

--Fetch product 
IF @productId != NULL
BEGIN
    SELECT @productCode = ProductCode
        ,@productDescription = ProductDescription
    FROM d_afterpay.dbo.Product
    WHERE ProductId = @productId
END

IF @@ROWCOUNT = 0
BEGIN
    SET @error = 'Product not found: ' + cast(@productId AS VARCHAR(19))

    RAISERROR (@error,16,1);
END
Run Code Online (Sandbox Code Playgroud)

当我以这种方式运行时:

exec ele_test 5
Run Code Online (Sandbox Code Playgroud)

我明白了:

Msg 50000, Level 16, State 1, Procedure ele_test, Line 20
Product not found. Productid : 5
Run Code Online (Sandbox Code Playgroud)

然而,当我像这样运行查询: …

t-sql sql-server sql-server-2008

1
推荐指数
1
解决办法
1054
查看次数

Sugarcrm:更改模块的图标

我在基本类型的sugarcrm中创建了一个模块.我现在想将它的图标从默认图标更改为自定义图标.我阅读了大量有关如何操作的论坛帖子,不同于在自定义/主题/默认/图像/或主题/ mytheme/images /中放置新图标,但没有一个说出我应该将这些图像命名为什么来获取它们已接.

有任何想法吗?

我正在使用6.5.15版本(Build 1083)

php sugarcrm suitecrm

1
推荐指数
1
解决办法
1754
查看次数