小编bat*_*wad的帖子

为什么Oracle没有为此查询引发"ORA-00918:列模糊定义"?

我刚刚在Oracle中遇到了一个奇怪的行为,我期望ORA-00918被提升,但事实并非如此.例如,以此查询为例.

SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)

此查询在概念上寻找具有禁用触发器的表的详细信息,但请注意,这不是我想要解决的问题.该查询,数据字典,视图或表格不是唯一的问题; 据我所知,它适用于任何一组表或视图(从我试过的两三个).

无论如何,尝试运行此查询,你会得到ORA-00918,因为两者USER_TABLESUSER_TRIGGERS有一个名为列STATUS,从而得到查询运行WHERE条款需要更改到TRG.STATUS.好吧,很酷,但尝试加入另一张桌子.

SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
JOIN USER_CONSTRAINTS CON ON CON.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)

这个查询,没有限定你的意思是哪个STATUS列,神奇地工作!别介意语义或查询返回的内容,没有错误. USER_CONSTRAINTS甚至还有一个名称STATUS也是如此,所以当有两列可供选择时它怎么会不知道该怎么做但是它更加模棱两可呢?

顺便说一下,这一切都在10.2.0.3.0上,如果你的查询中有两个以上的表,ORA-00918就会停止被提升.如果这是一个Oracle错误,有人知道它何时被修复,那么如果我们的数据库升级,哪个Oracle版本可能会导致牛仔查询爆炸?

更新

感谢BQ用于演示该错误已在11.2.0.1.0中修复.任何可以在早期版本中修复它的人的赏金!

sql oracle oracle10g oracle11g ora-00918

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

将WCF服务中的派生类型反序列化为基类型,但保留类型信息

我希望我的服务能够接受并返回派生的类型,BaseType而不会真正知道这些类型是什么.我几乎得到了一个解决方案,使用DataContractResolver基于此优秀博客文章SharedTypeResolver的自定义.

这个难题的缺失部分是我的服务将处理的类型可能不会被服务共享和知道,但我仍然想接受它们并且知道该类型应该是什么.我已经提出了以下作为堆栈的服务示例.您可以推送和弹出从BaseType您提供的任何类型派生SharedTypeResolver的类型,并在客户端和服务器之间共享类型.

[DataContract]
public class BaseType
{
    [DataMember]
    public string SomeText { get; set; }

    public override string ToString()
    {
        return this.GetType().Name + ": " + this.SomeText;
    }
}

[DataContract]
public class DerivedType : BaseType
{
    [DataMember]
    public int SomeNumber { get; set; }

    public override string ToString()
    {
        return base.ToString() + ", " + this.SomeNumber;
    }
}

[ServiceContract]
public interface ITypeStack
{
    [OperationContract]
    void Push(BaseType item);

    [OperationContract] …
Run Code Online (Sandbox Code Playgroud)

wcf serialization types datacontractserializer

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

如何使用多个WCF服务实例强制实施消息队列序列

我想创建一个使用MSMQ绑定的WCF服务,因为我有大量的服务要处理的通知.重要的是客户端不会受到服务的阻碍,并且通知按照引发的顺序进行处理,从而实现队列实现.

另一个考虑因素是弹性.我知道我可以集群MSMQ本身使队列更加健壮,但我希望能够在不同的服务器上运行我的服务实例,所以如果服务器崩溃通知不会在队列中积累但是另一台服务器继续进行处理.

我已经尝试了MSMQ绑定,并发现您可以让多个服务实例在同一个队列上进行侦听,并且自己离开时最终会进行一种循环,负载分布在可用服务上.这很好,但我最终失去了队列的排序,因为不同的实例需要不同的时间来处理请求.

我一直在使用一个简单的控制台应用程序进行实验,这是下面的史诗代码转储.当它运行时,我得到这样的输出:

host1 open
host2 open
S1: 01
S1: 03
S1: 05
S2: 02
S1: 06
S1: 08
S1: 09
S2: 04
S1: 10
host1 closed
S2: 07
host2 closed
Run Code Online (Sandbox Code Playgroud)

我想要发生的是:

host1 open
host2 open
S1: 01
<pause while S2 completes>
S2: 02
S1: 03
<pause while S2 completes>
S2: 04
S1: 05
S1: 06
etc.
Run Code Online (Sandbox Code Playgroud)

我原以为,由于S2还没有完成,它可能仍会失败,并将正在处理的消息返回给队列.因此,不应允许S1从队列中拉出另一条消息.我的队列是我们的交易,我试过设置TransactionScopeRequired = true服务,但无济于事.

这甚至可能吗?我是以错误的方式去做的吗?是否有其他方法可以在没有某种中央同步机制的情况下构建故障转移服务?

class WcfMsmqProgram
{
    private const string QueueName = "testq1";

    static void Main()
    {
        // Create a …
Run Code Online (Sandbox Code Playgroud)

wcf failover msmq

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

为什么布尔变量的默认值倾向于为false?

据我所知,在C#,VB,Java和JavaScript中,布尔变量的默认值是false(或者在JavaScript的情况下,“行为类似false”更为准确),而且我敢肯定还有很多其他这种情况下使用的语言。

我想知道为什么会这样吗?语言设计师为什么选择false默认语言?对于数值,我可以看到零是一个合理的选择,但我看不出它false比更加自然true

顺便说一句,是否有默认语言为true的语言?

theory programming-languages

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

Dapper多映射两种相同类型的属性

假设我以平展形式存储在我的数据库中的联系人,这样我就像这样查询它们:

SELECT Name, HomeHouseNumber, HomePostcode, WorkHouseNumber, WorkPostcode FROM Contacts
Run Code Online (Sandbox Code Playgroud)

我希望在我的C#代码中有一个更多的结构,并且这个简单的定义了一个带有家庭和工作地址的联系人.

class Address
{
    public string HouseNumber { get; set; }
    public string Postcode { get; set; }
}

class Contact
{
    public string Name { get; set; }
    public Address HomeAddress { get; set; }
    public Address WorkAddress { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我发现我可以使用多映射通过别名选择列中的列来提取家庭地址,如下所示:

IEnumerable<Contact> GetContacts()
{
    return Connection.Query<Contact, Address, Address, Contact>(
        "SELECT Name, HomeHouseNumber as HouseNumber, HomePostcode as Postcode, WorkHouseNumber, WorkPostcode FROM Contacts",
        (contact, home, work) =>
        {
            contact.HomeAddress …
Run Code Online (Sandbox Code Playgroud)

dapper

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