如果我执行select
部分,它可以正常运行,但是如果我尝试查看此select
,然后调用该视图,则会显示“ORA-00942:table或视图不存在“。我有其他观点没有case when
条款可行。
$oracletext10="create or replace view consulta1
as (SELECT ArticulosCanal99.CODIGO,
ArticulosCanal99.UBICACION,
SumaArticulosenPalets.CODIGO,
SumaArticulosenPalets.UBICACION,
case ArticulosCanal99.codigo when
SumaArticulosenPalets.codigo then 1 end as Expr1,
ArticulosCanal99.UNIS_PALET_COMPLETO AS Palet_Completo
FROM SumaArticulosenPalets
RIGHT JOIN ArticulosCanal99
ON SumaArticulosenPalets.CODIGO = ArticulosCanal99.CODIGO)";
$stid10 = oci_parse($db,$oracletext10);
oci_execute($stid10);
答案 0 :(得分:1)
详细说明@ RobvanWijk的评论:
在此处引用Oracle 11.2 SQL reference's page on CREATE VIEW,"包含视图的架构的所有者必须具有从所有表或视图中选择,插入,更新或删除行所需的权限视图是基于。 必须直接授予所有者这些权限,而不是通过角色"。因此,您的用户已通过角色被授予新视图的基表/视图的权限,因此可以成功执行SELECT语句。但是,当您从此SQL语句创建视图时,用户的基于角色的权限是不够的:您需要执行以下GRANT语句才能创建视图:
GRANT SELECT ON SUMAARTICULOSENPALETS TO your-user-here;
GRANT SELECT ON ARTICULOSCANAL99 TO your-user-here;
替换"你的用户 - 这里"使用您正在使用的用户名。
祝你好运。