当我在块外编写查询时,我可以查看结果,但是在函数内部编写则显示错误。
SELECT max(logid) FROM hawk.log_patch_execution_result;
输出:
461
功能:
CREATE OR REPLACE FUNCTION latest_log_id RETURN NUMBER IS
v_log_id NUMBER;
v_sql VARCHAR2(4000);
BEGIN
SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
RETURN v_log_id;
END latest_log_id;
/
输出:
Create function, executed in 16 ms
PL/SQL: ORA-00942: table or view does not exist
PL/SQL: SQL Statement ignored
Total execution time 16 ms
答案 0 :(得分:3)
您要从中选择的表属于用户hawk
。
用户应被授予SELECT
特权(在该表上)。我假设您通过某种角色做到了这一点(因为SELECT
本身可以正常工作,但不能作为函数的一部分)。但是,这行不通-您应该直接授予特权给用户,而不是通过角色。
答案 1 :(得分:1)
您正在使用的架构/用户似乎存在问题。 尝试通过在函数中添加架构名称的方式对其进行编译。
@Test
public void testSystemNative() {
new MockUp<System>(System.class) {
@Mock
@SuppressWarnings("unused")
long currentTimeMillis() {
return 0L;
}
};
Assert.assertEquals( 0L,System.currentTimeMillis());
}