Возвратите запись зачета (виртуальная таблица) от функции

Десятичное в двоичное с использованием только Bash

Любое целое число может быть преобразовано в двоичное с использованием его ::

touch dec2bin.bash && chmod +x "

Десятичное в двоичное с использованием только Bash

Любое целое число может быть преобразовано в двоичное с использованием его ::

[110]

И затем скопируйте следующее:

#!/bin/bash
num=$1;
dec2bin()
{
    op=2; ## Since we're converting to binary
    quo=$(( $num/ $op)); ## quotient
    rem=$(( $num% $op)); ## remainder
    array=(); ## array for putting remainder inside array
    array+=("$rem"); ## array expansion
        until [[ $quo -eq 0 ]]; do
            num=$quo; ## looping to get all remainder, untill the remainder is 0
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem"; ## array expansion
        done
    binary=$(echo "${array[@]}" | rev); ## reversing array
    printf "$binary\n"; ## print array
}
main()
{
[[ -n ${num//[0-9]/} ]] &&
    { printf "$num is not an integer bruv!\n"; return 1;
    } || { dec2bin $num; }
}
main;

Например:

./dec2bin.bash $var
110100100

Необходимо добавить целое число !!

./dec2bin.bash 420.py
420.py is not an integer bruv!

Кроме того, еще один способ с использованием Python: много медленнее

python -c "print(bin(420))"
0b110100100

От шестнадцатеричного к двоичному с использованием только Bash

Аналогично, от шестнадцатеричного к двоичному, как следует с использованием только Bash:

#!/usr/local/bin/bash ## For Darwin :( higher bash :)
#!/bin/bash ## Linux :)
hex=$1;
hex2bin()
{
    op=2; num=$((16#$hex));
    quo=$(( $num/ $op));
    rem=$(( $num% $op));
    array=();
    array+=("$rem");
        until [[ $quo -eq 0 ]]; do
            num=$quo;
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem";
        done
    binary=$(echo "${array[@]}" | rev);
    printf "Binary of $1 is: $binary\n";
}
main()
{
[[ -n ${hex//[0-9,A-F,a-f]/} ]] &&
    { printf "$hex is not a hexa decimal number bruv!\n"; return 1;
    } || { hex2bin $hex; }
}
main;

Для Пример:

./hex2bin.bash 1aF
Binary of 1aF is: 110101111

Шестнадцатеричное должно быть передано:

./hex2bin.bash XyZ
XyZ is not a hexa decimal number bruv!
" && vim "

Десятичное в двоичное с использованием только Bash

Любое целое число может быть преобразовано в двоичное с использованием его ::

[110]

И затем скопируйте следующее:

#!/bin/bash
num=$1;
dec2bin()
{
    op=2; ## Since we're converting to binary
    quo=$(( $num/ $op)); ## quotient
    rem=$(( $num% $op)); ## remainder
    array=(); ## array for putting remainder inside array
    array+=("$rem"); ## array expansion
        until [[ $quo -eq 0 ]]; do
            num=$quo; ## looping to get all remainder, untill the remainder is 0
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem"; ## array expansion
        done
    binary=$(echo "${array[@]}" | rev); ## reversing array
    printf "$binary\n"; ## print array
}
main()
{
[[ -n ${num//[0-9]/} ]] &&
    { printf "$num is not an integer bruv!\n"; return 1;
    } || { dec2bin $num; }
}
main;

Например:

./dec2bin.bash $var
110100100

Необходимо добавить целое число !!

./dec2bin.bash 420.py
420.py is not an integer bruv!

Кроме того, еще один способ с использованием Python: много медленнее

python -c "print(bin(420))"
0b110100100

От шестнадцатеричного к двоичному с использованием только Bash

Аналогично, от шестнадцатеричного к двоичному, как следует с использованием только Bash:

#!/usr/local/bin/bash ## For Darwin :( higher bash :)
#!/bin/bash ## Linux :)
hex=$1;
hex2bin()
{
    op=2; num=$((16#$hex));
    quo=$(( $num/ $op));
    rem=$(( $num% $op));
    array=();
    array+=("$rem");
        until [[ $quo -eq 0 ]]; do
            num=$quo;
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem";
        done
    binary=$(echo "${array[@]}" | rev);
    printf "Binary of $1 is: $binary\n";
}
main()
{
[[ -n ${hex//[0-9,A-F,a-f]/} ]] &&
    { printf "$hex is not a hexa decimal number bruv!\n"; return 1;
    } || { hex2bin $hex; }
}
main;

Для Пример:

./hex2bin.bash 1aF
Binary of 1aF is: 110101111

Шестнадцатеричное должно быть передано:

./hex2bin.bash XyZ
XyZ is not a hexa decimal number bruv!
"

И затем скопируйте следующее:

#!/bin/bash
num=$1;
dec2bin()
{
    op=2; ## Since we're converting to binary
    quo=$(( $num/ $op)); ## quotient
    rem=$(( $num% $op)); ## remainder
    array=(); ## array for putting remainder inside array
    array+=("$rem"); ## array expansion
        until [[ $quo -eq 0 ]]; do
            num=$quo; ## looping to get all remainder, untill the remainder is 0
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem"; ## array expansion
        done
    binary=$(echo "${array[@]}" | rev); ## reversing array
    printf "$binary\n"; ## print array
}
main()
{
[[ -n ${num//[0-9]/} ]] &&
    { printf "$num is not an integer bruv!\n"; return 1;
    } || { dec2bin $num; }
}
main;

Например:

./dec2bin.bash $var
110100100

Необходимо добавить целое число !!

./dec2bin.bash 420.py
420.py is not an integer bruv!

Кроме того, еще один способ с использованием Python: много медленнее

python -c "print(bin(420))"
0b110100100

От шестнадцатеричного к двоичному с использованием только Bash

Аналогично, от шестнадцатеричного к двоичному, как следует с использованием только Bash:

#!/usr/local/bin/bash ## For Darwin :( higher bash :)
#!/bin/bash ## Linux :)
hex=$1;
hex2bin()
{
    op=2; num=$((16#$hex));
    quo=$(( $num/ $op));
    rem=$(( $num% $op));
    array=();
    array+=("$rem");
        until [[ $quo -eq 0 ]]; do
            num=$quo;
            quo=$(( $num / $op));
            rem=$(( $num % $op));
            array+="$rem";
        done
    binary=$(echo "${array[@]}" | rev);
    printf "Binary of $1 is: $binary\n";
}
main()
{
[[ -n ${hex//[0-9,A-F,a-f]/} ]] &&
    { printf "$hex is not a hexa decimal number bruv!\n"; return 1;
    } || { hex2bin $hex; }
}
main;

Для Пример:

./hex2bin.bash 1aF
Binary of 1aF is: 110101111

Шестнадцатеричное должно быть передано:

./hex2bin.bash XyZ
XyZ is not a hexa decimal number bruv!
37
задан Erwin Brandstetter 22 June 2013 в 03:47
поделиться

3 ответа

Если вы хотите запустить новый мастер на основе вашего выбора на первой странице, вы можете использовать базовый класс JFace org.eclipse.jface .wizard.WizardSelectionPage .

select * from storeopeninghours_tostring(1) f(a text, b text, c text);

Таким образом, вы должны определить, что вы ожидаете от схемы выходной строки функции в запросе. Чтобы избежать этого, вы можете указать выходные переменные в определении функции:

CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
 RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
 RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
 RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;

(не совсем уверен, почему требуются дополнительные :: text приведения ... Возможно, '1' по умолчанию является varchar?)

37
ответ дан 27 November 2019 в 04:10
поделиться

Я довольно часто использую временные таблицы в своих функциях. Вам нужно создать возвращаемый тип в базе данных, а затем создать переменную этого типа для возврата. Ниже приведен пример кода, который делает именно это.

CREATE TYPE storeopeninghours_tostring_rs AS
(colone text,
 coltwo text,
 colthree text
);

CREATE OR REPLACE FUNCTION "public"."storeopeninghours_tostring" () RETURNS setof storeopeninghours_tostring_rs AS
$BODY$
DECLARE
  returnrec storeopeninghours_tostring_rs;
BEGIN
    BEGIN 
        CREATE TEMPORARY TABLE tmpopeninghours (
            colone text,
            coltwo text,
            colthree text
        );
    EXCEPTION WHEN OTHERS THEN
        TRUNCATE TABLE tmpopeninghours; -- TRUNCATE if the table already exists within the session.
    END;
    insert into tmpopeninghours VALUES ('1', '2', '3');
    insert into tmpopeninghours VALUES ('3', '4', '5');
    insert into tmpopeninghours VALUES ('3', '4', '5');

    FOR returnrec IN SELECT * FROM tmpopeninghours LOOP
        RETURN NEXT returnrec;
    END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;


select * from storeopeninghours_tostring()
23
ответ дан 27 November 2019 в 04:10
поделиться
CREATE OR REPLACE FUNCTION foo(open_id numeric, OUT p1 varchar, OUT p2 varchar, OUT p3 varchar) RETURNS SETOF RECORD AS $$
BEGIN
  p1 := '1'; p2 := '2'; p3 := '3';
  RETURN NEXT; 
  p1 := '3'; p2 := '4'; p3 := '5';
  RETURN NEXT; 
  p1 := '3'; p2 := '4'; p3 := '5';
  RETURN NEXT; 
  RETURN;
END;
$$ LANGUAGE plpgsql;
7
ответ дан 27 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: