这个函数是真正的PL/SQL吗?

发布于 2024-09-07 01:59:20 字数 195 浏览 4 评论 0原文

它在 PL/SQL 中的使用形式是否正确?

SELECT ename
        ,hiredate
       , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') AS "Révision" 
FROM emp

谢谢

is it used in the correct form in PL/SQL ?

SELECT ename
        ,hiredate
       , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') AS "Révision" 
FROM emp

thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

寄离 2024-09-14 01:59:20

它不是 PL/SQL(Oracle 对 SQL 的过程扩展)。

我相信 ADD_MONTHS 是 Oracle 特定的 SQL。

不确定使用 TRUNC 删除日期/时间的月份部分是否也是 Oracle 特定的。

It isn't PL/SQL (which is Oracle's procedural extension to SQL).

ADD_MONTHS is, I believe, Oracle specific SQL.

Not sure whether using TRUNC to remove the day in month portion of a date/time is also Oracle specific.

他是夢罘是命 2024-09-14 01:59:20

该语句是有效的 Oracle SQL:您将六个月添加到 hiredate,然后以特定格式返回该月的第一天。

然而,如果您想在 PL/SQL 中使用它,您需要将其返回到某个变量中:

declare
    l_ename emp.ename%type;
    l_hiredate emp.hiredate%type;
    l_revision varchar2(20);
begin
    SELECT ename
        ,hiredate
       , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
    INTO l_ename
         , l_hiredate
         , l_revision
    FROM emp;
end;

当然,您的 EMP 表中可能有不止一条记录。因此,您要么需要限制查询返回单行,要么需要使用能够处理多行的变量,例如 PL/SQL 集合或游标:

....
for emp_recs in ( SELECT ename
                          ,hiredate
                          , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
                  FROM emp )
loop
    .....

That statement is valid Oracle SQL: you are adding six months to the hiredate and then returning the first day of that month in a specific format.

However, if you want to use it in PL/SQL you need to return it into some variable(s):

declare
    l_ename emp.ename%type;
    l_hiredate emp.hiredate%type;
    l_revision varchar2(20);
begin
    SELECT ename
        ,hiredate
       , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
    INTO l_ename
         , l_hiredate
         , l_revision
    FROM emp;
end;

Of course, it is likely you have more than one record in your EMP table. So you either need to restrict the query to return a single row, or you need to use a variable capable of handling multiple rows such as a PL/SQL collection or a cursor:

....
for emp_recs in ( SELECT ename
                          ,hiredate
                          , TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'Le DD MONTH YYYY') 
                  FROM emp )
loop
    .....
愁杀 2024-09-14 01:59:20

它可能不是 PL/SQL,但它(几乎)是有效的 Oracle SQL。我能看到的唯一问题是格式模型中的“Le”需要加引号才能工作,因为这只是随机文本,否则 Oracle 会尝试为其找到一些含义。

SELECT
  ename, 
  hiredate, 
  TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'"Le" DD MONTH YYYY') 
FROM emp

It may not be PL/SQL but it is (almost) valid Oracle SQL. The only problem I can see is that the 'Le' in the in format model needs to be quoted for it to work as this is just random text that Oracle would otherwise try to find some meaning for.

SELECT
  ename, 
  hiredate, 
  TO_CHAR(TRUNC(ADD_MONTHS(hiredate,6),'MONTH'),'"Le" DD MONTH YYYY') 
FROM emp
朮生 2024-09-14 01:59:20

如果您的意思是它符合 SQL99 或 SQL92,请使用验证器 http://developer.mimer .com/validator/parser99/index.tml

If you mean if it's SQL99 compliant or SQL92, use the validator http://developer.mimer.com/validator/parser99/index.tml

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文