无法使用带case case子句的select创建视图

时间:2018-04-05 14:30:59

标签: php sql oracle

如果我执行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);  

1 个答案:

答案 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;

替换"你的用户 - 这里"使用您正在使用的用户名。

祝你好运。