This is a quick reference article, to save time looking. Every so often I need to port tables between systems, either different versions, hosts or platforms. Automated tools are faster if one does this routinely; but for singular use, the following allows best control (and lets you adjust the indices etc).

The SQL variables should be replaced with their logical values...

Oracle


set pages 0
set long 999999
select dbms_metadata.get_ddl('TABLE', '@db', '@table') from dual;

The Oracle suite ships with a lot of tools, one may also use

 exp userid=system file=full_ddl.dmp rows=n

MySQL


use @db
show create table @table

postgres

The storproc solution is taken from here
< code type="">
# either
pg_dump --schema-only -t @table
# or
CREATE OR REPLACE FUNCTION generate_create_table_statement(p_table_name varchar)
RETURNS text AS
$BODY$
DECLARE
v_table_ddl text;
column_record record;
BEGIN
FOR column_record IN
SELECT
b.nspname as schema_name,
b.relname as table_name,
a.attname as column_name,
pg_catalog.format_type(a.atttypid, a.atttypmod) as column_type,
CASE WHEN
(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
FROM pg_catalog.pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) IS NOT NULL THEN
'DEFAULT '|| (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128)
FROM pg_catalog.pg_attrdef d
WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef)
ELSE
''
END as column_default_value,
CASE WHEN a.attnotnull = true THEN
'NOT NULL'
ELSE
'NULL'
END as column_not_null,
a.attnum as attnum,
e.max_attnum as max_attnum
FROM
pg_catalog.pg_attribute a
INNER JOIN
(SELECT c.oid,
n.nspname,
c.relname
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ ('^('||p_table_name||')$')
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 2, 3) b
ON a.attrelid = b.oid
INNER JOIN
(SELECT
a.attrelid,
max(a.attnum) as max_attnum
FROM pg_catalog.pg_attribute a
WHERE a.attnum > 0
AND NOT a.attisdropped
GROUP BY a.attrelid) e
ON a.attrelid=e.attrelid
WHERE a.attnum > 0
AND NOT a.attisdropped
ORDER BY a.attnum
LOOP
IF column_record.attnum = 1 THEN
v_table_ddl:='CREATE TABLE '||column_record.schema_name||'.'||column_record.table_name||' ('||chr(10)||
' '||column_record.column_name||' '||column_record.column_type||' '||column_record.column_default_value||' '||column_record.column_not_null;
END IF;

IF column_record.attnum < column_record.max_attnum THEN
v_table_ddl:=v_table_ddl||','||chr(10)||
' '||column_record.column_name||' '||column_record.column_type||' '||column_record.column_default_value||' '||column_record.column_not_null;
ELSE
v_table_ddl:=v_table_ddl||');';
END IF;
END LOOP;

RETURN v_table_ddl;
END;
$BODY$
LANGUAGE 'plpgsql' COST 100.0 SECURITY INVOKER;

SELECT generate_create_table_statement('@table');
</ code>

If your platform uses PHP7, I have made an export class for the whole DB schema, available from 1. Real use requires intelligence on indexes, to meet foreign key constraints so its necessary to create a few simple utility functions. I wrote this in PHP as the driver exposes more low level details (like the C API); compared to Python, Perl or Ruby.