FAQ
List,

I recently wrote a SQL script containing a PL/SQL anonymous block. I used
DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
and pasted the script into a SQL*Plus session. However, when I just hit "r"
to rerun the script, I noticed that it produced no output. Later I passed
this to a user who ran it using Toad and got no output. Can anybody tell me
what (isn't) going on?

The reason I used PL/SQL in this manner is that I needed more logic than SQL
itself could provide. In our environment, creating database objects requires
a lot of red tape, but we have a read-only account that can be used to run
queries or ad-hoc scripts.

Thanks,
Dennis Williams

Search Discussions

  • Niall Litchfield at Mar 9, 2011 at 3:47 pm
    How did you enable output?

    On 9 Mar 2011 15:45, "Dennis Williams" wrote:

    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than SQL
    itself could provide. In our environment, creating database objects requires
    a lot of red tape, but we have a read-only account that can be used to run
    queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
  • Dennis Williams at Mar 9, 2011 at 4:05 pm
    I enabled output with

    SET SERVEROUTPUT ON

    Oh yeah, and this is Oracle 10.2.0.4 on the server, using an 11g client
    SQL*Plus.
    On Wed, Mar 9, 2011 at 9:47 AM, Niall Litchfield wrote:

    How did you enable output?

    On 9 Mar 2011 15:45, "Dennis Williams"
    wrote:

    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    http://www.freelists.org/webpage/oracle-l
  • Kish Patchava at Mar 9, 2011 at 4:11 pm
    I think it is little bit different in TOAD. You have to manually enable dbms
    output in TOAD prior to running the script.

    On Wed, Mar 9, 2011 at 11:05 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    I enabled output with

    SET SERVEROUTPUT ON
    Oh yeah, and this is Oracle 10.2.0.4 on the server, using an 11g client
    SQL*Plus.

    On Wed, Mar 9, 2011 at 9:47 AM, Niall Litchfield <
    niall.litchfield_at_gmail.com> wrote:
    How did you enable output?

    On 9 Mar 2011 15:45, "Dennis Williams"
    wrote:

    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    http://www.freelists.org/webpage/oracle-l
  • Michael Moore at Mar 9, 2011 at 4:21 pm
    It would help to SEE what you did.
    Mike

    On Wed, Mar 9, 2011 at 7:43 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    http://www.freelists.org/webpage/oracle-l
  • Dennis Williams at Mar 9, 2011 at 4:29 pm
    Thanks Mike. Here is an abbreviated version of my script.

    SET ECHO OFF

    SET VERIFY OFF

    SET SERVEROUTPUT ON

    DECLARE

    -- local variables and cursors
    BEGIN

    -- PL/SQL code

    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    DBMS_OUTPUT.PUT_LINE('QH Source Lot ID = '||LotRec.AppID);
    DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);

    END;

    /
    On Wed, Mar 9, 2011 at 10:21 AM, Michael Moore wrote:

    It would help to SEE what you did.
    Mike


    On Wed, Mar 9, 2011 at 7:43 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    http://www.freelists.org/webpage/oracle-l
  • Craig.Healey_at_mail.ing.nl at Mar 9, 2011 at 4:45 pm
    SET SERVEROUTPUT ON

    works fine with my TOAD (10.6.1.3)
    and the script works fine run in SQL*Plus (10.2.0.3.0) from TOAD

    (Oracle 10.2.0.4 on Solaris)

    Craig

    From: oracle-l-bounce_at_freelists.org On Behalf Of Dennis Williams
    Sent: 09 March 2011 17:30
    To: Michael Moore
    Cc: oracle-l@freelists.org
    Subject: Re: Simple PL/SQL output question

    Thanks Mike. Here is an abbreviated version of my script.

    SET ECHO OFF

    SET VERIFY OFF

    SET SERVEROUTPUT ON

    DECLARE

    -- local variables and cursors
    BEGIN

    -- PL/SQL code

    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    DBMS_OUTPUT.PUT_LINE('QH Source Lot ID = '||LotRec.AppID);
    DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);

    END;

    /
    On Wed, Mar 9, 2011 at 10:21 AM, Michael Moore > wrote:
    It would help to SEE what you did.
    Mike

    On Wed, Mar 9, 2011 at 7:43 AM, Dennis Williams > wrote:
    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used DBMS_OUTPUT to sent results to the screen. This worked fine when I copied and pasted the script into a SQL*Plus session. However, when I just hit "r" to rerun the script, I noticed that it produced no output. Later I passed this to a user who ran it using Toad and got no output. Can anybody tell me what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than SQL itself could provide. In our environment, creating database objects requires a lot of red tape, but we have a read-only account that can be used to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams

    ATTENTION:

    The information in this electronic mail message is private and
    confidential, and only intended for the addressee. Should you
    receive this message by mistake, you are hereby notified that
    any disclosure, reproduction, distribution or use of this
    message is strictly prohibited. Please inform the sender by
    reply transmission and delete the message without copying or
    opening it.

    Messages and attachments are scanned for all viruses known.
    If this message contains password-protected attachments, the
    files have NOT been scanned for viruses by the ING mail domain.
    Always scan attachments before opening them.
  • Niall Litchfield at Mar 9, 2011 at 5:22 pm
    I don't know about TOAD but for R to work I'd expect to have a
    DBMS_OUTPUT.ENABLE(....) line in the anonymous block itself.

    On Wed, Mar 9, 2011 at 4:29 PM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    Thanks Mike. Here is an abbreviated version of my script.

    SET ECHO OFF
    SET VERIFY OFF
    SET SERVEROUTPUT ON
    DECLARE
    -- local variables and cursors
    BEGIN
    -- PL/SQL code
    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    DBMS_OUTPUT.PUT_LINE('QH Source Lot ID = '||LotRec.AppID);
    DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);
    END;
    /
    On Wed, Mar 9, 2011 at 10:21 AM, Michael Moore wrote:

    It would help to SEE what you did.
    Mike


    On Wed, Mar 9, 2011 at 7:43 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    Niall Litchfield
    Oracle DBA
    http://www.orawin.info

    --
    http://www.freelists.org/webpage/oracle-l
  • Michael Moore at Mar 9, 2011 at 5:44 pm
    Hi Dennis,
    Actually I meant show us the entire run like:

    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 9 09:40:47 2011

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    SQL> set serveroutput on
    SQL> select * from dual;
    SP2-0640: Not connected
    SQL> connect ops$mmoore
    Enter password: ********
    ERROR:

    ORA-12560: TNS:protocol adapter error

    SQL>

    Frankly, I'm not familiar with the R command. Perhaps Niall is on the right
    track.

    Regards.
    Mike

    On Wed, Mar 9, 2011 at 8:29 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    Thanks Mike. Here is an abbreviated version of my script.

    SET ECHO OFF
    SET VERIFY OFF
    SET SERVEROUTPUT ON
    DECLARE
    -- local variables and cursors
    BEGIN
    -- PL/SQL code
    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    DBMS_OUTPUT.PUT_LINE('QH Source Lot ID = '||LotRec.AppID);
    DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);
    END;
    /
    On Wed, Mar 9, 2011 at 10:21 AM, Michael Moore wrote:

    It would help to SEE what you did.
    Mike


    On Wed, Mar 9, 2011 at 7:43 AM, Dennis Williams <
    oracledba.williams_at_gmail.com> wrote:
    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    http://www.freelists.org/webpage/oracle-l
  • William Robertson at Mar 10, 2011 at 12:44 am
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    You should not need to re-enable dbms_output once set, unless
    something is disabling it or you are somehow invisibly losing
    package state. There is nothing special about re-executing a PL/SQL
    block that would do this.

    SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 10 00:38:33
    2011

    Copyright (c) 1982, 2010, Oracle.  All rights reserved.

    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 -
    Production
    With the Partitioning, OLAP, Data Mining and Real
    Application Testing options

    SQL> begin
    2     dbms_output.put_line('Some output');
    3  end;
    4  /
    Some output

    PL/SQL procedure successfully completed.

    SQL> r
    1  begin
    2     dbms_output.put_line('Some output');
    3* end;
    Some output

    PL/SQL procedure successfully completed.

    SQL> /
    Some output

    PL/SQL procedure successfully completed.

    RUN is documented here:
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12037.htm

    Michael Moore
    9 March 2011 17:44

    Hi Dennis,
    Actually I meant show us the entire run like:

    SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 9
    09:40:47 2011

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    SQL> set serveroutput on
    SQL> select * from dual;
    SP2-0640: Not connected
    SQL> connect ops$mmoore
    Enter password: ********
    ERROR:
    ORA-12560: TNS:protocol adapter error

    SQL>

    Frankly, I'm not familiar with the R command. Perhaps
    Niall is on the right track.

    Regards.
    Mike

    Dennis Williams
    9 March 2011 16:29

    Thanks Mike. Here is an abbreviated version of my script.

    SET ECHO OFF
    SET VERIFY OFF
    SET SERVEROUTPUT ON
    DECLARE
    -- local variables and cursors
    BEGIN
    -- PL/SQL code

    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    DBMS_OUTPUT.PUT_LINE('QH Source Lot ID =
    '||LotRec.AppID);
    DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);
    END;
    /

    Michael Moore
    9 March 2011 16:21

    It would help to SEE what you did.
    Mike

    Dennis Williams
    9 March 2011 15:43

    List,

    I recently wrote a SQL script containing a PL/SQL anonymous
    block. I used DBMS_OUTPUT to sent results to the screen. This
    worked fine when I copied and pasted the script into a
    SQL*Plus session. However, when I just hit "r" to rerun the
    script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can
    anybody tell me what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed
    more logic than SQL itself could provide. In our environment,
    creating database objects requires a lot of red tape, but we
    have a read-only account that can be used to run queries or
    ad-hoc scripts.

    Thanks,
    Dennis Williams
  • Subodh Deshpande at Mar 10, 2011 at 4:08 am
    Dennis,

    from the TNS error it seems its network issue..and not related to
    dbms..output...

    to get output in some file you should use spool

    thanks...subodh
    On 9 March 2011 21:13, Dennis Williams wrote:

    List,

    I recently wrote a SQL script containing a PL/SQL anonymous block. I used
    DBMS_OUTPUT to sent results to the screen. This worked fine when I copied
    and pasted the script into a SQL*Plus session. However, when I just hit "r"
    to rerun the script, I noticed that it produced no output. Later I passed
    this to a user who ran it using Toad and got no output. Can anybody tell me
    what (isn't) going on?

    The reason I used PL/SQL in this manner is that I needed more logic than
    SQL itself could provide. In our environment, creating database objects
    requires a lot of red tape, but we have a read-only account that can be used
    to run queries or ad-hoc scripts.

    Thanks,
    Dennis Williams
    --
    ==============================
    DO NOT FORGET TO SMILE TODAY
    ==============================

    --
    http://www.freelists.org/webpage/oracle-l
  • Anonymous at Mar 10, 2011 at 12:36 pm
    Dennis,

    SET ECHO OFF

    SET VERIFY OFF

    SET SERVEROUTPUT ON

    DECLARE

    -- local variables and cursors
    BEGIN

    -- PL/SQL code

    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.NEW_LINE;
    --DBMS_OUTPUT.PUT_LINE('QH Source Lot ID = '||LotRec.AppID);
    --DBMS_OUTPUT.PUT_LINE('QH State = '||LotRec.State);

    END;

    /

    The above runs fine in Toad. Toad is smart enough to see that you are
    using DBMS_OUTPUT and if not enabled, will turn it on.

    In sqlplus, the above works fine for me using 11.1.0.6 client on Windows
    2000 connected to a 10.2.0.4 database on Linux. I get the row of dashes.
    If I "r" the command, I get a listing of it followed by another line of
    dashes - so it's working fine. Same again if I just "/" it - except
    there's no display of the SQL itself, just the output.

    :-(

    Cheers,
    Norm.

    Norman Dunbar
    Contract Senior Oracle DBA
    Capgemini Database Team (EA)
    Internal : 7 28 2051
    External : 0113 231 2051

    Information in this message may be confidential and may be legally privileged. If you have received this message by mistake, please notify the sender immediately, delete it and do not copy it to anyone else.

    We have checked this email and its attachments for viruses. But you should still check any attachment before opening it.
    We may have to make this message and any reply to it public if asked to under the Freedom of Information Act, Data Protection Act or for litigation. Email messages and attachments sent to or from any Environment Agency address may also be accessed by someone other than the sender or recipient, for business purposes.

    If we have sent you information and you wish to use it please read our terms and conditions which you can get by calling us on 08708 506 506. Find out more about the Environment Agency at www.environment-agency.gov.uk
  • Anonymous at Mar 10, 2011 at 12:51 pm
    Dennis,

    Actually, I've spotted a little gotcha - if the DBMS_OUTPUT.PUT line(s)
    are not followed by a DBMS_OUTPUT.PUT_LINE or a DBMS_OUTPUT.NEW_LINE
    then the last lot of output from DBMS_OUTPUT..PUT doesn't appear, ever!

    BEGIN

    DBMS_OUTPUT.PUT('==========================================');
    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.PUT('==========================================');
    dbms_output.put_line('Norm was here');

    END;

    /

    If you comment out the last line above, then nothing ever appears, no
    matter how often you run it.

    I don't suppose your full pl/sql code is missing a DBMS_OUTPUT.NEW_LINE
    or a DBMS_OUTPUT.PUT_LINE at the end is it?

    Just a thought.

    Cheers,
    Norm.

    Norman Dunbar
    Contract Senior Oracle DBA
    Capgemini Database Team (EA)
    Internal : 7 28 2051
    External : 0113 231 2051

    Information in this message may be confidential and may be legally privileged. If you have received this message by mistake, please notify the sender immediately, delete it and do not copy it to anyone else.

    We have checked this email and its attachments for viruses. But you should still check any attachment before opening it.
    We may have to make this message and any reply to it public if asked to under the Freedom of Information Act, Data Protection Act or for litigation. Email messages and attachments sent to or from any Environment Agency address may also be accessed by someone other than the sender or recipient, for business purposes.

    If we have sent you information and you wish to use it please read our terms and conditions which you can get by calling us on 08708 506 506. Find out more about the Environment Agency at www.environment-agency.gov.uk
  • Powell, Mark at Mar 10, 2011 at 6:10 pm
    I do not see how this is a gocha since this behavior is documented and the package has always worked this way:

    "You can either place an entire line of information into the buffer by calling PUT_LINE, or you can build a line of information piece by piece by making multiple calls to PUT."

    -----Original Message-----
    From: oracle-l-bounce_at_freelists.org On Behalf Of Dunbar, Norman (Capgemini)
    Sent: Thursday, March 10, 2011 7:52 AM
    To: oracledba.williams_at_gmail.com; oracle-l_at_freelists.org
    Subject: RE: Simple PL/SQL output question

    Dennis,

    Actually, I've spotted a little gotcha - if the DBMS_OUTPUT.PUT line(s) are not followed by a DBMS_OUTPUT.PUT_LINE or a DBMS_OUTPUT.NEW_LINE then the last lot of output from DBMS_OUTPUT..PUT doesn't appear, ever!

    BEGIN

    DBMS_OUTPUT.PUT('==========================================');
    DBMS_OUTPUT.PUT('------------------------------------------');
    DBMS_OUTPUT.PUT('==========================================');
    dbms_output.put_line('Norm was here'); END; /

    If you comment out the last line above, then nothing ever appears, no matter how often you run it.

    I don't suppose your full pl/sql code is missing a DBMS_OUTPUT.NEW_LINE or a DBMS_OUTPUT.PUT_LINE at the end is it?

    Just a thought.

    Cheers,
    Norm.

    Norman Dunbar
    Contract Senior Oracle DBA
    Capgemini Database Team (EA)
    Internal : 7 28 2051
    External : 0113 231 2051

    Information in this message may be confidential and may be legally privileged. If you have received this message by mistake, please notify the sender immediately, delete it and do not copy it to anyone else.

    We have checked this email and its attachments for viruses. But you should still check any attachment before opening it.
    We may have to make this message and any reply to it public if asked to under the Freedom of Information Act, Data Protection Act or for litigation. Email messages and attachments sent to or from any Environment Agency address may also be accessed by someone other than the sender or recipient, for business purposes.

    If we have sent you information and you wish to use it please read our terms and conditions which you can get by calling us on 08708 506 506. Find out more about the Environment Agency at www.environment-agency.gov.uk
    --
    http://www.freelists.org/webpage/oracle-l

    --
    http://www.freelists.org/webpage/oracle-l
  • Anonymous at Mar 11, 2011 at 7:57 am
    Morning Mark,
    I do not see how this is a gocha since this behavior is
    documented and the package has always worked this way:
    True, I meant a possible gotcha with the code as shown. It was using PUT
    rather than PUT_LINE - I thought it possible that the complete code
    (which we didn't get to see) may have missed out a PUT_LINE or a
    NEW_LINE.
    "You can either place an entire line of information into the
    buffer by calling PUT_LINE, or you can build a line of
    information piece by piece by making multiple calls to PUT."
    This is true, but not something I normally do, I put my messages out as
    complete lines - when I need to - using PUT_LINE. I think I've used PUT
    once in my entire life, maybe twice!;-)

    Cheers,
    Norm.

    Information in this message may be confidential and may be legally privileged. If you have received this message by mistake, please notify the sender immediately, delete it and do not copy it to anyone else.

    We have checked this email and its attachments for viruses. But you should still check any attachment before opening it.
    We may have to make this message and any reply to it public if asked to under the Freedom of Information Act, Data Protection Act or for litigation. Email messages and attachments sent to or from any Environment Agency address may also be accessed by someone other than the sender or recipient, for business purposes.

    If we have sent you information and you wish to use it please read our terms and conditions which you can get by calling us on 08708 506 506. Find out more about the Environment Agency at www.environment-agency.gov.uk

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouporacle-l @
categoriesoracle
postedMar 9, '11 at 3:43p
activeMar 11, '11 at 7:57a
posts15
users9
websiteoracle.com

People

Translate

site design / logo © 2022 Grokbase