大家好.在使用sql developer将sqlserver转换到oracle,脚本执行时候出现了一些莫名的错误,因为对oracle语法不熟悉,找不出来错误的原因,希望大家忙吧谢谢1.CREATE OR REPLACE VIEW vDropdownPages
AS
SELECT DISTINCT Application.ApplicationName,
PagePermission.Page,
Treeview.Caption NameOnTreeView,
PagePermission.LibraryID,
PagePermission.Page || '_' || PagePermission.LibraryID || '_' || CAST(Page.AppID AS NVARCHAR2) PageAppID,
Application.AppID
FROM PagePermission
JOIN Page
ON PagePermission.Page = Page.Page
AND PagePermission.LibraryID = Page.LibraryID
JOIN Application
ON Page.AppID = Application.AppID
LEFT JOIN Treeview
ON Page.LinkID = Treeview.LinkID
WHERE ( PagePermission.Valid = 1 )
ORDER BY Application.ApplicationName,
PagePermission.LibraryID,
PagePermission.Page;提示红字那一行有错
SQL 错误: ORA-00906: 缺失左括号
00906. 00000 - "missing left parenthesis"
AS
SELECT DISTINCT Application.ApplicationName,
PagePermission.Page,
Treeview.Caption NameOnTreeView,
PagePermission.LibraryID,
PagePermission.Page || '_' || PagePermission.LibraryID || '_' || CAST(Page.AppID AS NVARCHAR2) PageAppID,
Application.AppID
FROM PagePermission
JOIN Page
ON PagePermission.Page = Page.Page
AND PagePermission.LibraryID = Page.LibraryID
JOIN Application
ON Page.AppID = Application.AppID
LEFT JOIN Treeview
ON Page.LinkID = Treeview.LinkID
WHERE ( PagePermission.Valid = 1 )
ORDER BY Application.ApplicationName,
PagePermission.LibraryID,
PagePermission.Page;提示红字那一行有错
SQL 错误: ORA-00906: 缺失左括号
00906. 00000 - "missing left parenthesis"
oracle应该没有这个函数,可能是这里的问题
CREATE OR REPLACE VIEW vGroupPermissions
AS
SELECT GrantorUserGroup.GroupID Grantor,
Organization.Name GranteeOrgName,
GranteeUserGroup.GroupID Grantee,
(CASE GroupPermission.Permission
WHEN 1 THEN 'Read'
WHEN 2 THEN 'Insert'
WHEN 4 THEN 'Update'
WHEN 8 THEN 'Delete'
WHEN 3 THEN 'Read+Insert'
WHEN 5 THEN 'Read+Update'
WHEN 9 THEN 'Read+Delete'
WHEN 6 THEN 'Insert+Update'
WHEN 10 THEN 'Insert+Delete'
WHEN 12 THEN 'Update+Delete'
WHEN 7 THEN 'Read+Insert+Update'
WHEN 14 THEN 'Insert+Update+Delete'
WHEN 11 THEN 'Read+Insert+Delete'
WHEN 13 THEN 'Read+Update+Delete'
WHEN 15 THEN 'Read+Insert+Update+Delete' END) PermissionSettings,
(CASE
WHEN (UTL_RAW.BIT_AND(GroupPermission.Permission,CAST_FROM_NUMBER(1))) = 1 THEN 1
ELSE 0
END) READ,
(CASE
WHEN (UTL_RAW.BIT_AND(GroupPermission.Permission,CAST_FROM_NUMBER(2))) = 2 THEN 1
ELSE 0
END) INSERT, 注释:这行error
(CASE
WHEN (UTL_RAW.BIT_AND(GroupPermission.Permission,CAST_FROM_NUMBER(4))) = 4 THEN 1
ELSE 0
END) UPDATE,
(CASE
WHEN (UTL_RAW.BIT_AND(GroupPermission.Permission,CAST_FROM_NUMBER(8))) = 8 THEN 1
ELSE 0
END) DELETE,
GroupPermission.PermissionID,
GranteeUserGroup.Admin IsGranteeAdminGroup,
GroupPermission.Grantor GrantorID,
GroupPermission.Grantee GranteeID,
Organization.OrgID GranteeOrgID,
GrantorUserGroup.OrgID
FROM GroupPermission
JOIN UserGroup GrantorUserGroup
ON GroupPermission.Grantor = GrantorUserGroup.ResourceGroupID
JOIN UserGroup GranteeUserGroup
ON GroupPermission.Grantee = GranteeUserGroup.ResourceGroupID
JOIN Organization
ON GranteeUserGroup.OrgID = Organization.OrgID
JOIN OrgCode
ON Organization.OrgID = OrgCode.OrgID
WHERE ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GrantorUserGroup.Valid = 1 )
OR ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GranteeUserGroup.Valid = 1 )
OR ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GrantorUserGroup.Valid = 0 )
AND ( GrantorUserGroup.Grantor = 1 )
OR ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GrantorUserGroup.Grantee = 1 )
AND ( GrantorUserGroup.Admin = 1 )
OR ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GranteeUserGroup.Valid = 0 )
AND ( GranteeUserGroup.Grantor = 1 )
OR ( GroupPermission.Grantor <> GroupPermission.Grantee )
AND ( GranteeUserGroup.Grantee = 1 )
AND ( GranteeUserGroup.Admin = 1 )
错误报告:
SQL 错误: ORA-00923: 未找到要求的 FROM 关键字
00923. 00000 - "FROM keyword not found where expected"
CAST(Page.AppID AS NVARCHAR2(200))
给NVARCHAR2订个长度就好了
CREATE OR REPLACE VIEW vUserPermission_ListGroupIDs
AS
SELECT GroupID,
ResourceGroupID,
OrgID
FROM ( SELECT 'Select Group' GroupID, 注释错误/error
'-1' ResourceGroupID,
'-1' OrgID
FROM DUAL
UNION
SELECT DISTINCT GroupID,
ResourceGroupID,
OrgID
FROM UserGroup
WHERE ( NVL(Tag, '') <> GroupID )
AND ( Program = 0 )
AND ( Valid = 1 ) ) P
ORDER BY OrgID
命令出错, 行: 4,021 列: 19
错误报告:
SQL 错误: ORA-12704: 字符集不匹配
12704. 00000 - "character set mismatch"
AS
SELECT '-1' OrgID, //error
'Select Organization' NAME,
'-1' UserID
FROM DUAL
UNION
SELECT DISTINCT o.OrgID,
o.NAME,
oa.UserID
FROM Organization o
JOIN OrgAdmin oa
ON o.OrgID = oa.OrgID
JOIN OrgCode oc
ON o.OrgID = oc.OrgID错误报告:
SQL 错误: ORA-01790: 表达式必须具有与对应表达式相同的数据类型
01790. 00000 - "expression must have same datatype as corresponding expression"
-- Insert into our temp table
INSERT INTO tt_PageIndex
( ItemId )
SELECT PerUser.Id
FROM aspnet_PersonalizationPerUser PerUser,
aspnet_Users Users,
aspnet_Paths Paths
WHERE Paths.ApplicationId = v_ApplicationId
AND PerUser.UserId = Users.UserId
AND PerUser.PathId = Paths.PathId
AND ( v_Path IS NULL
OR Paths.LoweredPath LIKE LOWER(v_Path) )
AND ( v_UserName IS NULL
OR Users.LoweredUserName LIKE LOWER(v_UserName) )
AND ( v_InactiveSinceDate IS NULL
OR Users.LastActivityDate <= v_InactiveSinceDate )
ORDER BY Paths.PATH ASC,
Users.UserName ASC; v_TotalRecords := SQL%ROWCOUNT; SELECT Paths.PATH,
PerUser.LastUpdatedDate,
LENGTHB(PerUser.PageSettings),
Users.UserName,
Users.LastActivityDate
FROM aspnet_PersonalizationPerUser PerUser,
aspnet_Users Users,
aspnet_Paths Paths,
tt_PageIndex PageIndex
WHERE PerUser.Id = PageIndex.ItemId
AND PerUser.UserId = Users.UserId
AND PerUser.PathId = Paths.PathId
AND PageIndex.IndexId >= v_PageLowerBound
AND PageIndex.IndexId <= v_PageUpperBound
ORDER BY Paths.PATH ASC,
Users.UserName ASC;END;
BEGIN
RETURN;
/*Limitation:Syntax Not Recognized:null */
END;
错误报告:
ORA-06550: 第 41 行, 第 1 列: //估计错误行报的不准确
PLS-00103: 出现符号 "BEGIN"
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.没有了,希望大家帮忙,谢谢.
select '-1' orgid, '-1' orgin 这种写法代表什么意思呢? 在oracle中 '-1' 代表字符型吗?,如果是的话后边这个orgid又怎么呢?,如果是个2个字段怎么不用 ,号呢?
SELECT '-1' OrgID, //error
'Select Organization' NAME,
'-1' UserID
FROM DUAL
你会得到这个结果:orgid // 列名
-1 // 该列的值,永远是'-1',而且是个字符型的
4. CREATE OR REPLACE VIEW vPermission_OrgList
AS
SELECT '-1' OrgID, -- 这边你指定了类型为字符型的
'Select Organization' NAME,
'-1' UserID
FROM DUAL
UNION
SELECT DISTINCT o.OrgID, --如果这里你的字段类型是number,就和上面的'-1' OrgID冲突,所以就会出错
o.NAME,
oa.UserID
FROM Organization o
JOIN OrgAdmin oa
ON o.OrgID = oa.OrgID
JOIN OrgCode oc
ON o.OrgID = oc.OrgID
恩,我去试试去,谢谢您. 跟sqlserver差别太大了.