标签: oracle9i

无法从存储过程(PL/SQL)中的dba_tab_cols中进行选择

我正在尝试从存储过程中的dba_tab_cols视图中进行SELECT.它不起作用,我不知道为什么.

如果我执行以下SQL作为查询:

SELECT t.data_type FROM dba_tab_cols t
WHERE 
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是,如果我将其复制到存储过程中,如下所示:

SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
    t.table_name = 'ACCOUNTTYPE' AND 
    t.column_name = 'ACCESSEDBY';
Run Code Online (Sandbox Code Playgroud)

我收到错误消息"PL/SQL:ORA-00942:表或视图不存在",编辑器在尝试编译时突出显示dba_tab_cols.在这两种情况下都使用相同的db用户.

dataType声明为:dataType varchar2(128);

PL/SQL(Oracle 9)

有人知道这个问题吗?

sql oracle stored-procedures oracle9i ora-00942

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

单个SQL SELECT从一个表行返回多个行

我们有一个表格形式:

ID,Value1,Value2,Value3
1,2,3,4
Run Code Online (Sandbox Code Playgroud)

我们需要将其转化为.

ID,Name,Value
1,'Value1',2
1,'Value2',3
1,'Value3',4
Run Code Online (Sandbox Code Playgroud)

在一个SELECT语句中是否有一种聪明的方法(即没有UNION)?列名称Value1,Value2和Value3是固定且常量的.

该数据库是oracle 9i.

sql oracle select plsql oracle9i

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

希望设计一个工具,将业务逻辑从存储过程转换为C#业务层

没有讨论业务逻辑应该在数据库中还是在应用程序层,因为它已经被其他地方所覆盖.

我的团队正在翻译100K +行的PL/SQL代码,并将逻辑从数据库移到应用程序中.我们使用VB6直接调用Oracle 9i存储过程和Ad-hoc查询,现在使用C#,.net 3.5,Winforms和NHibernate到Oracle 9i数据库.

我们已经找到了一个很好的工具来帮助转换Ad-hoc查询SmartCode,但它只创建基于表和视图的代码.我们正在寻找一种工具来协助转换存储过程.

存储过程中包含我们要迁移到应用程序层的大部分业务逻辑.我们想知道是否有任何工具可以将存储过程转换为C#代码.

假设没有,如果我们开发内部/开源工具,最好的起点是什么.是否有其他类似的系统具有类似的目标,可以用作起点?

接受的答案更新: 我选择了范围蠕变的答案,因为它似乎是实现问题中提出的问题的最佳方法.对于那些处理同一问题的人,我衷心地推荐Adam的回应,因为他强烈主张反对使用工具并提供强有力的理由.他还提供了与这个问题最多的互动,并且得到了最多的投票反应.

感谢大家的帮助和对话.

c# nhibernate oracle9i

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

何时在Oracle的查询中评估用户定义的函数?

我在SELECT语句中使用用户定义的函数时遇到了一些有趣的行为.

我有几个存储过程从单个表中读取和清除数据.这些存储过程由多个源使用.

在我的观察中,似乎用户定义的函数有时是任意评估的,并不总是在执行它所使用的SELECT语句之后或期间立即进行评估.

例如,在存储过程中,我有一个select语句可能看起来像这样:

SELECT Something, MyFunction(Something) FROM Somewhere;
Run Code Online (Sandbox Code Playgroud)

然后调用另一个存储过程,该过程从表中清除数据.清除的数据量由另一个表控制,该表存储最大ID读取.这样清除不应该删除任何尚未被执行的存储过程的另一个实例读取的数据.

在我的测试代码中,MyFunction只返回表Somewhere中的行数.因此,我认为它应该始终等于SELECT语句返回的行数.但是,在我运行此存储过程的两个实例的情况下,我得到如下结果:

第一个查询实例:

Something  MyFunction(Something)
---------  ---------------------
A          3
B          3
C          3
Run Code Online (Sandbox Code Playgroud)

第二个查询实例:

Something  MyFunction(Something)
---------  ---------------------
A          0
B          0
C          0    
Run Code Online (Sandbox Code Playgroud)

为什么第二个查询返回所有行,但在同一个表上运行的用户定义函数报告表中没有更多行?

无论如何,我可以确保第二个查询实例是一致的,因为用户定义的函数仍然看到父存储过程看到的相同数据?

oracle plsql oracle9i

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

Oracle SQL Developer:如何使用PIVOT函数将行转置为列

我正在尝试创建一个查询,使用PIVOT函数将行转换为列.

这是contact我想要转换成行的表:

   PARTYID CONTACTTEXT  CONTACTTYPECD
---------- ------------ -------------
       100 0354441010               1
       100 0355551010               2
       100 0428105789               3
       100 abc@home.com             4
Run Code Online (Sandbox Code Playgroud)

我的预期结果:

   PARTYID PHONE        FAX          MOBILE       EMAIL      
---------- ------------ ------------ ------------ ------------
       100 0354441010   0355551010   0428105789   abc@home.com
Run Code Online (Sandbox Code Playgroud)

我的查询:

SELECT * FROM 
  ( 
    SELECT partyId, contacttext, contacttypecd 
    FROM CONTACT 
    WHERE partyId = 100; 
  ) 
  PIVOT ( 
    MAX(contacttext) 
  FOR contacttypecd in (1 Phone, 2 Fax, 3 Mobile, 4 Email)); 
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Error starting at line 9 in command: 
FOR contacttypecd in (1 …
Run Code Online (Sandbox Code Playgroud)

sql oracle pivot oracle9i

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

部署war文件时设置unix权限的更好方法

我们有一个供应商应用程序,我们可以在其中下载他们的更新并部署一个 war 文件。我们正在运行 oracle 应用程序服务器 9i 的 unix 应用程序服务器上部署 war 文件。我相信当我们部署 war 文件时,我们会删除以前的安装,然后部署新的 war 文件。当我们部署war文件时,有时我们必须手动设置类和其他文件的unix文件权限。我们这样做是为了让所有 UNIX 用户 ID 都可以运行他们需要的进程。有一个更好的方法吗?

java unix oracle oracle9i

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

ORA-00257:归档错误

当我尝试连接到我的数据库时,我收到以下错误.

ORA-00257:归档错误.仅在连接内部直到释放.

直到昨天,数据库非常实用.

任何解决方法?

oracle oracle9i ora-00257

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

查找块中游标或表列的数据类型

是否可以在不使用系统表的情况下找出块内游标或变量的列的数据类型?虽然我知道我可以使用系统表来查找此信息,但速度会慢很多。

就像是,

declare
   my_column_data_type varchar2(30);
begin
  my_column_data_type := all_tables.table_name%type;
  dbms_output.put_line(my_column_data_type);
end;
Run Code Online (Sandbox Code Playgroud)

如果不诉诸 ,我找不到任何方法来做到这一点dbms_sql,这对于我的最终目的来说是矫枉过正的。

但是,甲骨文已经掌握了所有信息。如果我尝试将 a 分配varchar2给 anumber那么它会立即抱怨,以便它知道数据类型是什么。

而且,是的,我知道 Oracle 的版本数量很荒谬,但这就是我们目前拥有的数量……9i 很快就会消亡,取而代之的是 11,但如果我能找到答案,这段代码将立即在 9i 上运行!但我包括了 11 个,因为如果需要的话我可以等待更好的解决方案,

oracle plsql oracle9i oracle11g oracle11gr2

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

Oracle - 更新字符串以仅替换最后一个字符

我在Oracle 9i数据库中有以下字符串:

A,B,C,

当它是字符串中的最后一项时,我需要替换','的所有实例.我已经提出了以下声明,但它删除了字段中的所有内容,而不仅仅是逗号.有什么建议?

UPDATE table SET column = REPLACE(SUBSTR(column, -1, 1), ',', '');
Run Code Online (Sandbox Code Playgroud)

replace substr oracle9i sql-update

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

如何使用 ODP.NET Core 连接到 Oracle 9i 数据库 - 托管驱动程序

当我尝试连接到 Oracle 9i db 时,我总是收到 ORA-1017 无效的用户名/密码;登录被拒绝。在 Oracle 10g 或更高版本上一切正常。

ODP.NET 核心:2.18.3;ASP.NET 核心:2.1.403

ConnectionString:“数据源=myTnsName;密码=myPassword;用户ID=myUserId”

TnsAdmin 已设置。

在数据库端的 Oracle 登录中,我发现了这个条目:ORA-1017 无效的用户名/密码;未知身份验证类型:6A

欢迎任何想法?可以连接吗?

oracle odp.net oracle9i odp.net-managed asp.net-core-2.1

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