- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在以 user1
身份连接到 Oracle 数据库。在数据库中,user2
存在,并且有一个包 pack1
,其中包含两个存储过程:proc1
和 proc2
。
我正在尝试调用这些过程,但收到上述错误。该错误提到了类型中定义的“type1”。
经过一番研究,建议检查权限,但这些似乎没问题。我正在使用 Oracle SQL Developer,当我在 pack1
和 type1
上单击“grants”时,我的用户同时拥有 EXECUTE 和 DEBUG 权限。
我认为这是代码中的错误,但这会引发不同的错误。我考虑过为该包创建一个同义词,因为我读到这些可以提供帮助,但我没有必要这样做的权利,在我提出要求之前,我想用尽我所有的选择。
当我尝试运行这些存储过程时,我尝试使用我准备好的调用和 SQL Developer 创建的默认调用。有趣的是,当我运行我的代码时,会抛出提到的错误。当我运行“默认”代码时,出现“绝对 URI 中的相对路径”错误。
有什么我可能错过的吗?
这是我用来调用该过程的代码。
DECLARE
ClientData type1;
BEGIN
pack1.proc1(param1,param2,ClientData);
FOR i IN 1..ClientData.LAST LOOP
DBMS_OUTPUT.PUT_LINE(ClientData(i).kid ||' '...;
--DBMS_OUTPUT.PUT_LINE(ClientData(i).portfolioName);
--DBMS_OUTPUT.PUT_LINE(ClientData(i).clientCategory);
--DBMS_OUTPUT.PUT_LINE(ClientData(i).typ_pf);
--DBMS_OUTPUT.PUT_LINE(ClientData(i). ptf_ccy);
END LOOP;
END;
编辑1:这是完整的错误:
ORA-06550: row 2, column 14:
PLS-00201: identifier 'SYSADMIN(user2).CLIENTDATAINSTRESB_A(type1)' must be declared
ORA-06550: row 2, column 14:
PL/SQL: Item ignored
ORA-06550: row 4, column 53:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: row 4, column 1:
PL/SQL: Statement ignored
ORA-06550: row 5, column 13:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: row 5, column 1:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
在正常情况下,我会包含程序的正文,但是,这是业务,因此我无法分享。
据我了解,在调用开始时,声明失败,因此会导致其余错误,因为这些错误对应于调用“type1”的位置。
为了进一步解释“type1”是什么,它是对表(“type2”)的引用。它是由以下代码创建的:
create or replace TYPE type1 IS TABLE OF type2;
编辑2正如 @Alex Poole 建议的那样,我修改了我的声明:
DECLARE
ClientData user2.type1;
但是,它重现了相同的错误:
PLS-00201: identifier 'user2.type1' must be declared
编辑3
错误的名称是由于我忘记对代码进行 sanitizer 造成的,已修复。
软件包和这两种类型均由 user2 所有。当我连接到数据库时,从我的角度看不到任何东西。没有表格、包或类型。只有当我浏览“其他用户”并查看user2的视角时,我才能看到所需的程序。
另外,我确信我拥有所有必需对象的特权(执行和调试)。那就是包和定义的类型。
在谈论如何授予特权时,有没有办法检查这一点?我使用命令
SELECT * FROM USER_TAB_PRIVS;
将 user2 列为授予者和所有者,将 user1 列为受让人
编辑4
这是 SELECT * FROM USER_TAB_PRIVS 的结果;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY COMMON TYPE
USER1 USER2 TYPE2 USER2 DEBUG NO NO NO TYPE
USER1 USER2 TYPE2 USER2 EXECUTE NO NO NO TYPE
USER1 USER2 TYPE1 USER2 DEBUG NO NO NO TYPE
USER1 USER2 TYPE1 USER2 EXECUTE NO NO NO TYPE
USER1 USER2 PACK1 USER2 DEBUG NO NO NO PACKAGE
USER1 USER2 PACK1 USER2 EXECUTE NO NO NO PACKAGE
PUBLIC SYS USER1 USER1 INHERIT PRIVILEGES NO NO NO USER
编辑 5:将结果表从小写改为大写。然而,正如建议的那样,我仔细检查了包的名称和类型,它们确实是大写的。
最佳答案
我认为你的主要问题是类型的定义。
您必须检查哪一行使用了哪种类型。
你应该拥有什么:
user1 -> NO TYPES,调用 user2-stuff 的包
用户2 -> 类型1、包1、过程1
示例:
-- Create your type on schema user2
CREATE OR REPLACE TYPE USER2.TestType AS OBJECT
(
NEWATTRIB1 VARCHAR2(1000)
)
/
-- Create your package at user2
CREATE OR REPLACE PACKAGE user2.TestPackage AS
FUNCTION MyFunction(Param1 IN TestType) RETURN TestType;
END TestPackage;
/
CREATE OR REPLACE PACKAGE BODY user2.TestPackage AS
FUNCTION MyFunction(Param1 IN TestType) RETURN TestType IS
BEGIN
RETURN Param1;
END;
END TestPackage;
/
-- Grant rights user1 (run with user2)
GRANT ALL ON TestType TO User1 WITH GRANT OPTION;
GRANT EXECUTE ON TestPackage TO User1 WITH GRANT OPTION;
-- Call proc from User1
declare
tmp USER2.TestType;
tmp2 USER2.TestType;
begin
tmp := USER2.TestType('Mr.Smith');
tmp2 := USER2.TESTPACKAGE.MYFUNCTION(tmp);
dbms_output.put_line('tmp: ' || tmp.NEWATTRIB1);
dbms_output.put_line('tmp2: ' || tmp2.NEWATTRIB1);
end;
请记住:两种类型永远不会相同!如果您在架构中使用类型,则不允许您在另一个架构中定义类似类型来检索对象。您必须在其他架构中显式命名该类型 (=user2.type1)。您必须向想要使用该类型的架构/用户授予权限(在您的示例中授予类型和包权限)。
在现有项目中进行故障排除时,您可以逐步检查:
编写一些使用您的类型的 plsql
declare
tmp user2.type1;
begin
tmp := user2.type1('Mr.Smith');
-- if this works, your type-privs are correct.
end;
编写一些使用该包的 plsql
关于oracle - PLS-00201 : identifier 'TYPE' must be declared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41503862/
假设a是张量,那么有什么区别: 类型(a) a.类型 a.type() 我找不到区分这些的文档。 最佳答案 type 是 python 内置方法。 它将返回对象的类型。喜欢 torch.Tensor.
什么是 Type 1 的居民的例子?两者都不是 Type也不是Type的居民?在 Idris REPL 中进行探索时,我无法想出任何东西。 更准确地说,我正在寻找一些 x除了 Type产生以下结果:
我找到了一些资源,但我不确定我是否理解。 我找到的一些资源是: http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb2ff3358411d1829f00
这两个函数原型(prototype)有什么区别? void apply1(double(f)(double)); void apply2(double(*f)(double)); 如果目标是将提供的函
http://play.golang.org/p/icQO_bAZNE 我正在练习使用堆进行排序,但是 prog.go:85: type bucket is not an expression
假设有一个泛型定义的方法信息对象,即一个方法信息对象,这样的方法Info.IsGenericMethodDefinition==TRUE:。也可以说它们也有一个泛型参数列表:。我可以使用以下命令获取该
在具有依赖类型的语言中,您可以使用 Type-in-Type 来简化语言并赋予它很多功能。这使得语言在逻辑上不一致,但如果您只对编程感兴趣而不对定理证明感兴趣,这可能不是问题。 在 Cayenne
根据 Nim 手册,变量类型是“静态类型”,而变量在内存中指向的实际值是“动态类型”。 它们怎么可能是不同的类型?我认为将错误的类型分配给变量将是一个错误。 最佳答案 import typetrait
假设您有以下结构和协议(protocol): struct Ticket { var items: [TicketItem] = [] } struct TicketItem { } prot
我正在处理一个 EF 问题,我发现它很难调试...以前,在我的系统中有一个表类型继承设置管理不同的用户类型 - 所有用户共有的一种根类型,以及大致基于使用该帐户的人员类型的几种不同的子类型。现在,我遇
这是我的 DBManager.swift import RealmSwift class DBManager { class func getAllDogs() -> [Dog] {
我正在尝试使用傅里叶校正图像中的曝光。这是我面临的错误 5 padded = np.log(padded + 1) #so we never have log of 0 6 g
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
请考虑以下设置: protocol MyProcotol { } class MyModel: MyProcotol { } enum Result { case success(value:
好吧,我将我的 python 项目编译成一个可执行文件,它在我的电脑上运行,但我将它发送给几个 friend 进行测试,他们都遇到了这个错误。我以前从未见过这样的错误。我使用 Nuitka 来编译代码
当我尝试训练我的模型时"ValueError: Type must be a sub-type of ndarray type"出现在 line x_norm=(np.power(x,2)).sum(
我尝试在另一个类中打断、计数然后加入对象。所以我构建协议(protocol): typealias DataBreaker = () -> [Double] typealias DataJoiner
我正在使用 VS 2015 更新 3、Angular 2.1.2、Typescript 2.0.6 有人可以澄清什么是 typings 与 npm @types 以及本月很难找到的任何其他文档吗? 或
我正在考虑从 VS2010 更改为 Mono,因此我通过 MoMA 运行我的程序集,看看我在转换过程中可能遇到多少困难。在生成的报告中,我发现我不断收到此错误: bool Type.op_Equali
主要问题 不太确定这是否可能,但由于我讨厌 Typescript 并且它使我的编码变得困难,我想我会问只是为了确定。 interface ISomeInterface { handler: ()
我是一名优秀的程序员,十分优秀!